Primefaces / JSF:未设置selectOneMenu值,未调用ajax监听器

时间:2014-01-10 02:41:01

标签: java ajax jsf jsf-2 primefaces

我正在使用Primefaces和JSF来开发这个前端。我的问题是我的一个selectonemenus从未设置其值绑定,“selectedGroup”,因此第二个下拉列表从未填充。我的后备bean被调用来“更新”第二个selectonemenu,但是没有调用该ajax的监听器,也没有设置selectedGroup。此代码实际上与"Select"的展示相同。我甚至验证了展示代码从头开始工作(我毫不怀疑),但是没看到我的情况与那个例子有什么不同。

关于此主题的其他stackoverflow问题表明遗漏了一些内容,但这些建议都不符合我的问题。

我有两个selectOneMenus,就像这样。

<h:form id="outerForm">

    <p:panel id="outerPanel">

        <p:panelGrid id="outerPanelGrid">
            <h:outputLabel for="groupSelection" value="Group: "/>
            <p:selectOneMenu id="groupSelection" value="#{myBean.selectedGroup}" >
                <p:ajax update="commandSelection"
                        listener="#{myBean.handleGroupSelection}" />
                <f:selectItem itemLabel="---Please Select Group---" itemValue=""/>
                <f:selectItems var="group" value="#{myBean.groups}"
                               itemLabel="#{group.name}" itemValue="#{group.name}" />
            </p:selectOneMenu>

            <h:outputLabel for="commandSelection" value="Command: "/>
            <p:selectOneMenu id="commandSelection" value="#{myBean.command}">
                <f:selectItems value="#{myBean.commandStringsList}"/>
            </p:selectOneMenu>
        </p:panelGrid>
     </p:panel>
</h:form>

此页面显示在我的布局模板的“中心”部分,如此...

<ui:define id="content" name="content">
    <p:panel id="contentPanel" style="float:left; border:none">
        <ui:include src="#{anotherBean.currentView}.xhtml"/>
    </p:panel>
</ui:define>

支持bean是否使用一些数据类来包含一些填充的数据,但我认为我正在做一切正确的事情以将其映射到视图中。但在大多数情况下,我使用的是字符串。

有人看到我错过的东西吗?至少,这个xhtml有效吗?

我还应该提一下,在我创建和使用模板之前,这个页面正在运行。基本上,我在tabview的选项卡中使用ui:include包含在index.xhtml的主体中。虽然我最初没有注意到,但是在我合并模板之后这个页面停止了工作(我知道测试不好)。

1 个答案:

答案 0 :(得分:0)

<f:selectItems var="group" value="#{myBean.groups}"
    itemLabel="#{group.name}" itemValue="#{group.name}" />

你不能用这种方式指定selectItems。翻译必须是双向的。使用转换器!

<f:selectItems var="group" value="#{myBean.groups}"
    itemLabel="#{group.name}" itemValue="#{group}" 
    converter="groupConverter"/>