This question already has an answer here:
p:commandButton action throws javax.el.PropertyNotFoundException
                                
                                    (1个答案)
                                
                        
                                3年前关闭。
            
                    
我正在尝试使用primefaces的自动完成功能,但是当我尝试从facelet调用bean方法时,它显示了一个错误,表明mybean没有这种方法,这是我的codePage.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui">
<h:head>

<title>Title</title>
</h:head>
<h:body>
<h:form id="form">
    <p:panel header="AutoComplete" toggleable="true" id="panel">
        <h:panelGrid columns="2" cellpadding="5">

            <h:outputLabel value="Simple :" for="acSimple" />
            <p:autoComplete id="acSimple" value="#{myBean.txt1}"
                    completeMethod="#{myBean.complete}"/>
                    </h:panelGrid>
                    </p:panel>
                    </h:form>
</h:body>
</html>


MyBean.java

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean(name="myBean")
@RequestScoped
public class MyBean {

    private String txt1;

    public List<String> complete(String query) {
        List<String> results = new ArrayList<String>();

        for (int i = 0; i < 10; i++) {
            results.add(query + i);
        }

        return results;
    }

    public String getTxt1() {
        return txt1;
    }

    public void setTxt1(String txt1) {
        this.txt1 = txt1;
    }
}


所以当我运行这段代码时,它显示了一个错误,表明myBean没有属性'complete'。我正在使用Eclipse和最新版本的primefaces。
我在这里做错什么了吗?请帮助

最佳答案

它显示错误,表明myBean没有属性“ complete”


属性?首先,不应将此操作方法视为属性。这表明#{myBean.complete}被视为值表达式而不是方法表达式,这与在<p>#{myBean.complete}</p>这样的纯HTML中内联时完全一样。这反过来提示<p:autoComplete>标记根本不会被识别为JSF组件,而只是被视为纯文本/ HTML。这反过来表明PrimeFaces taglib URI错误,或者JAR文件未正确放置在Web应用程序的运行时类路径中。

确保至少使用PrimeFaces 3.0版(在较早的版本中,taglib URI有所不同),并且JAR文件已放置在webapp的/WEB-INF/lib文件夹中。

10-08 19:42