【问题标题】:Passing parameters in JSF and PrimeFaces在 JSF 和 PrimeFaces 中传递参数
【发布时间】: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


    【解决方案1】:

    你在这里省略的转换器类玩的是真正的游戏......让我们看看你的问题

    如您所见,转换器类覆盖了 2 个方法

    getAsStringgetAsObject

    1)价值

    completeMethod="#{autoCompleteView.completeQuery}
    

    被重构为

    autoCompleteView.completeQuery(autoCompleteView.query);
    

    你可以在 Query 类中找到字符串方法。

    2).as 转换器是为自动完成定义的,它调用 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}" />
    

    【讨论】:

      猜你喜欢
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      • 2014-02-09
      • 1970-01-01
      • 1970-01-01
      • 2013-07-13
      • 2012-04-04
      相关资源
      最近更新 更多