Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JSF和PrimeFaces中传递参数_Jsf_Jsf 2_Primefaces - Fatal编程技术网

在JSF和PrimeFaces中传递参数

在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(

我正在学习PrimeFaces自动完成演示。我从完整的展示演示中缩短了它

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;
    }
}
我省略了一个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}" />