JSF 2.x <p:selectManyMenu>, <f:selectItems>, <p:selectOneMenu> 默认选择
JSF 2.x <p:selectManyMenu>, <f:selectItems>, <p:selectOneMenu> default selection
我有一个 <p:selectOneMenu>
供您选择级别;填充了一个列表,当单击其中一个 <f:selectItems>
然后使用 <p:ajax>
我用另一个列表更新我的 <p:selectManyMenu>
,带有条目。我希望它默认 select 该条目列表中的第一个元素并标记它,但事实并非如此。
实际发生的是,它采用保存在属性 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>
select许多菜单
<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>
中的第一个元素成为默认值 select编辑
如果需要任何进一步的说明,请写信 - 我将像鹰派一样监视此 post。
此问题的理由与此处已解释和回答的理由相同:How can I populate a text field using PrimeFaces AJAX after validation errors occur?
在您的具体情况下,只需使用 <p:ajax resetValues="true">
。您只需要确保 <p:ajax update>
覆盖需要重置的输入组件,并且 <p:ajax process>
不覆盖它们。
我有一个 <p:selectOneMenu>
供您选择级别;填充了一个列表,当单击其中一个 <f:selectItems>
然后使用 <p:ajax>
我用另一个列表更新我的 <p:selectManyMenu>
,带有条目。我希望它默认 select 该条目列表中的第一个元素并标记它,但事实并非如此。
实际发生的是,它采用保存在属性 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>
select许多菜单
<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>
中的第一个元素成为默认值 select编辑
如果需要任何进一步的说明,请写信 - 我将像鹰派一样监视此 post。
此问题的理由与此处已解释和回答的理由相同:How can I populate a text field using PrimeFaces AJAX after validation errors occur?
在您的具体情况下,只需使用 <p:ajax resetValues="true">
。您只需要确保 <p:ajax update>
覆盖需要重置的输入组件,并且 <p:ajax process>
不覆盖它们。