【发布时间】:2016-03-08 06:12:17
【问题描述】:
我正在研究 PrimeFaces AutoComplete 演示。我从完整的展示演示中缩短了它。 http://www.primefaces.org/showcase/ui/input/autoComplete.xhtml
AutoCompleteBean.java
@ManagedBean
public class AutoCompleteBean {
private Query query;
private List<Query> queries = new ArrayList<Query>();
@PostConstruct
public void init() {
queries.add(new Query(0, "Afterdark", "afterdark"));
queries.add(new Query(1, "Afternoon", "afternoon"));
queries.add(new Query(2, "Afterwork", "afterwork"));
queries.add(new Query(3, "Aristo", "aristo"));
}
public List<Query> completeQuery(String query) {
List<Query> filteredQueries = new ArrayList<Query>();
for (int i = 0; i < queries.size(); i++) {
Query skin = queries.get(i);
if(skin.getName().toLowerCase().contains(query)) {
filteredQueries.add(skin);
}
}
return filteredQueries;
}
public void onItemSelect(SelectEvent event) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Item Selected", event.getObject().toString()));
}
public Query getQuery() {
return query;
}
public void setQuery(Query query) {
this.query = query;
}
}
查询.java
public class Query {
private int id;
private String displayName;
private String name;
public Query() {}
public Query(int id, String displayName, String name) {
this.id = id;
this.displayName = displayName;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDisplayName() {
return displayName;
}
public void setDisplayName(String displayName) {
this.displayName = displayName;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
}
我省略了一个 Convert 类,我认为这不是那么相关。
搜索.xhtml
<h:form>
<p:growl id="msgs" showDetail="true" />
<h:panelGrid columns="2" cellpadding="5">
<p:autoComplete id="queryPojo" value="#{autoCompleteView.query}"
completeMethod="#{autoCompleteView.completeQuery}" var="query"
itemLabel="#{query.displayName}" itemValue="#{query}"
converter="queryConverter" forceSelection="true" />
<p:commandButton value="search" oncomplete="PF('dlg').show()"/>
</h:panelGrid>
</h:form>
对此我有三个问题:
1) completeMethod="#{autoCompleteView.completeQuery}":在不传递参数的情况下调用 completeQuery 方法,但它被定义为 completeQuery(String query)。这是如何工作的?
2) 值="#{autoCompleteView.query}"。 Query 是 AutoCompleteBean 中定义的对象。此 Query 对象如何将用户输入字符串作为其值?通常 InputText 的值比较适合接受用户的输入,它是一个 String 值。
3) 我还能在 p:autoComplete 组件中添加属性“action=...”吗?
【问题讨论】:
标签: jsf jsf-2 primefaces