Primefaces slectOneMenu使用itemLabel作为itemValue

时间:2014-01-24 14:56:35

标签: jsf jsf-2 primefaces

我的<p:selectOneMenu>有一个<f:selectItems>,在此<f:selectItems>我设置了itemLabelitemValue。 Item Value是一个Enum对象,它只包含一个String,Label就是这些String。 <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>

1 个答案:

答案 0 :(得分:0)

您可以将selectItem的值发送到bean中,而不是使用value of 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();
}