在JSF和PrimeFaces中传递参数
我正在学习PrimeFaces自动完成演示。我从完整的展示演示中缩短了它 AutoCompleteBean.java在JSF和PrimeFaces中传递参数,jsf,jsf-2,primefaces,Jsf,Jsf 2,Primefaces,我正在学习PrimeFaces自动完成演示。我从完整的展示演示中缩短了它 AutoCompleteBean.java @ManagedBean public class AutoCompleteBean { private Query query; private List<Query> queries = new ArrayList<Query>(); @PostConstruct public void init(
@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;
}
}
我省略了一个Convert类,我认为它没有那么重要
search.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(字符串查询)。这是怎么回事
2) value=“#{autoCompleteView.query}”。查询是在AutoCompleteBean中定义的对象。此查询对象如何将用户输入字符串作为其值?通常,InputText的值适合接受用户的输入,这是一个字符串值
3) 我仍然可以在p:autoComplete组件中添加一个属性“action=…”吗?此处省略的转换器类将执行真正的游戏。。。。让我们看看你的问题 如您所见,转换器类重写了2个方法
getAsString
和getAsObject
1) 价值
completeMethod="#{autoCompleteView.completeQuery}
重新构造为
autoCompleteView.completeQuery(autoCompleteView.query);
正如您可以在查询类中找到的字符串方法
2) 。因为转换器是为自动完成定义的,所以它调用getAsString方法在屏幕上呈现。选中时,调用getAsObject方法将字符串值转换为对象(查询)
3) 您可以使用ajax选择事件
<p:ajax event="select" listener="#{autoCompleteView.someMethod}">
或者通过p:autoComplete中的onSelect属性调用remoteCommand
<p:autoComplete id="queryPojo" value="#{autoCompleteView.query}" onSelect="someRemoteCommand();"
completeMethod="#{autoCompleteView.completeQuery}" var="query"
itemLabel="#{query.displayName}" itemValue="#{query}"
converter="queryConverter" forceSelection="true" />
<p:remoteCommand name="someRemoteCommand" update="queryPojo" actionListener="#{autoCompleteView.execute}" />
<p:autoComplete id="queryPojo" value="#{autoCompleteView.query}" onSelect="someRemoteCommand();"
completeMethod="#{autoCompleteView.completeQuery}" var="query"
itemLabel="#{query.displayName}" itemValue="#{query}"
converter="queryConverter" forceSelection="true" />
<p:remoteCommand name="someRemoteCommand" update="queryPojo" actionListener="#{autoCompleteView.execute}" />