我正在尝试使用primefaces的自动完成功能,但是当我尝试从我的facelet调用bean方法时,它显示一个错误,mybean没有这样的方法
这里是我的代码
Page.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。
我在这里做错了什么吗?
请帮助你?
答案 0 :(得分:2)
显示错误,myBean没有属性'complete'
属性?此操作方法不应该首先被视为属性。这表明#{myBean.complete}
被视为值表达式而不是方法表达式,就像在纯HTML中内联它时所发生的那样<p>#{myBean.complete}</p>
。这反过来表明<p:autoComplete>
标签根本没有被识别为JSF组件,而只是被视为纯文本/ HTML。这反过来表明PrimeFaces taglib URI错误,或者JAR文件未正确放置在webapp的运行时类路径中。
确保至少使用PrimeFaces 3.0版(旧版本中,taglib URI不同),并且JAR文件已放置在webapp的/WEB-INF/lib
文件夹中。