JSF 2.x <p:selectmanymenu>,<f:selectitems>,<p:selectonemenu>默认选择

时间:2015-06-23 11:36:51

标签: jsf-2 primefaces

我有<p:selectOneMenu>你选择一个关卡;填充了一个列表,当点击其中一个<f:selectItems>然后点击<p:ajax>时,我用另一个列表和条目更新我的<p:selectManyMenu>。我希望它默认选择条目列表中的第一个元素并标记它,这不是发生的事情。

发生的是,它采用属性submittedValue中保存的旧值并使用该属性中存储的值,这在当前列表中不存在,因此,它没有标记。

selectOneMenu

<p:selectOneMenu id="levelSelection" style="width:342px;text-align:left"
       panelStyle="width:180px"
       value="#{cc.attrs.agOptionObj.levelTemp}"
       onchange="onLevelSelectionChange(this), updateChild();"
       panelStyleClass="auto-close-panel"
       converter="lyngsoe.catellae.converter.LongOptionConverter"
       rendered="#{!cc.attrs.agOptionObj.hidePartitionSelection}">
           <f:selectItems
               value="#areaGroupSelection.getLevelsForHierarchy
                      (cc.attrs.agOptionObj,
                      cc.attrs.controller.model.periodSelectionOption,                        
                      cc.attrs.controller.reportName)}"
               var="levelOpt" 
               itemLabel="#{levelOpt.text}" 
               itemValue="#{levelOpt}"/>

           <p:ajax 
               update="levelEntries"
               listener="#{areaGroupSelection.levelChanged
                    (cc.attrs.agOptionObj,
                    cc.attrs.controller.model.periodSelectionOption)}"
               partialSubmit="true"/>
</p:selectOneMenu>

selectManyMenu

<p:selectManyMenu id="levelEntries"
        value="#{cc.attrs.agOptionObj.entriesTemp}"
        style="width:342px;text-align:left;height:150px"
        onchange="onEntriesSelectionChange(this);"
        converter="lyngsoe.catellae.converter.StringOptionConverter"
        rendered="#{!cc.attrs.hidePartitionSelection}"
        required="true"
        requiredMessage="#{msg['areaGroupSelection.areaError']}">
            <f:selectItems
               value="#{areaGroupSelection.getHierarchyNodesAtLevel
                         (cc.attrs.agOptionObj,
                         cc.attrs.controller.model.periodSelectionOption)}"
               var="entryOpt" itemLabel="#{entryOpt.text}" itemValue="#               
                           {entryOpt}"/>
</p:selectManyMenu>

我已阅读并尝试了以下链接:

我不确定我所寻找的是否使用其中一种:

澄清一下:我需要能够从我的<p:selectOneMenu>中进行选择,然后填充我的<p:selectManyMenu>并将<p:selectManyMenu>中的第一个元素设为默认选择。

如果需要进一步澄清,请写 - 我将像鹰一样监视这个帖子。

1 个答案:

答案 0 :(得分:2)

此问题与此处已解释和回答的理由相同:How can I populate a text field using PrimeFaces AJAX after validation errors occur?

在您的具体情况下,只需使用<p:ajax resetValues="true">即可。您只需要确保<p:ajax update>涵盖了需要重置的输入组件,<p:ajax process>不会覆盖它们。