【问题标题】:Primefaces slectOneMenu uses itemLabel as itemValuePrimefaces slectOneMenu 使用 itemLabel 作为 itemValue
【发布时间】:2014-02-15 15:03:15
【问题描述】:

我有一个<p:selectOneMenu>,其中有一个<f:selectItems>,在这个<f:selectItems> 中我设置了一个itemLabel 和一个itemValue。项目值是一个Enum 对象,它只包含一个字符串,标签是这些字符串。 <p:selectOneMenu> 的值是这些 Enum 对象的集合。 selectOneMenu 有一个valueChangeListener,当它被调用时,它成为“新值”的标签,而不是值。有谁知道我该如何解决这个问题?

<h:form>
    <p:selectOneMenu id="changeSpracheMenu"
                     value="#{sessionManager.currentUser.sprache}"
                     label="#{messageManager.getMessage('USER')}"
                     valueChangeListener="#{sessionManager.updateSpracheForCurrenUser}"
                     converter="sprachConverter">
        <f:selectItem itemLabel="#{messageManager.getMessage('LANGUAGE')}"
                      noSelectionOption="true" />
        <f:selectItems value="#{sprachManager.allSprachen}" var="sprache"
                       itemLabel="#{messageManager.getMessage('LANGUAGE_'.concat(sprache.name))}"
                       itemValue="#{sprache}" />
        <p:ajax event="change" update="@form"  />
    </p:selectOneMenu>
</h:form>

【问题讨论】:

    标签: jsf jsf-2 primefaces


    【解决方案1】:

    您可以将您的 selectItem 的值发送到您的 bean,而不是使用 valueChangeListener 的事件。

    为此,你必须修改

    <p:ajax event="change" update="@form"  />
    

    收件人:

    <p:ajax event="change" listener="#{yourBean.yourMethod(sprache)}" update="@form"  />
    

    现在在你的 bean 中:

    private yourObject sprache;
    //getter/setter
    
    public void yourMethod(yourObject typeSprache){
        whatever xyz = typeSprache.getWhatEverYouWant();
    }
    

    【讨论】:

    • 我已经按照你说的改了,但是不行。转换器成为标签作为值。只有当我删除标签时,他才会成为价值。而在来自监听器的方法中,给定的参数只有 null。
    • 我已经将他为 getAsObject 方法变成的转换器调试为来自 ItemLabel 的文本而不是 ItemValue。例如,如果我的 itemLabel 是“Hello World”并且 ItemValue 是“EN”,那么转换器将变为“Hello World”作为值。如果我从 中删除 ItemLabel 它会起作用,他会成为 EN。
    • 那么,你只需要调整你的转换器!
    • 我应该在我的转换器中调整什么?哪里有问题?
    猜你喜欢
    • 1970-01-01
    • 2012-10-29
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 2017-11-28
    • 1970-01-01
    相关资源
    最近更新 更多