[英]JSF Validation Error from Component that is not Rendered
我有一个表单,该表单的字段在编辑模式下需要呈现为只读值,而在创建模式下则需要呈现为下拉选择列表。
使用<h:outputText>
将只读字段(在编辑模式下使用)呈现为纯文本。 在创建模式下,呈现的字段<h:selectOneListbox>
具有必需的属性“ true”。
似乎大多数时候都可以正常工作,但是在编辑模式下(选择列表框未呈现)有时会出现验证错误。
这是代码段,其中两个字段都定义为使用相同的布尔值设置的渲染属性(仅一个字段取反布尔值即可切换)。
<h:outputLabel id="lblBusinessArea" value="Business Area:" />
<h:panelGroup id="baGroup">
<h:selectOneListbox id="businessAreaList" size="1"
rendered="#{shiftDetailsController.canEditBusinessArea}"
converter="businessAreaConverter"
value="#{shiftDetailsController.selectedBusinessArea}"
label="Business Area"
required="true">
<f:selectItems id="businessAreaListItems" value="#{shiftDetailsController.businessAreas}" />
<a4j:support id="businessAreaA4j" event="onchange"
ajaxSingle="true" reRender="deploymentGroupList, positionPayGroupList, sapPremCodeList" />
</h:selectOneListbox>
<h:outputText id="businessAreaRO"
rendered="#{!shiftDetailsController.canEditBusinessArea}"
value="#{shiftDetailsController.selectedBusinessArea.busAreaDesc}" />
</h:panelGroup>
下面是一个屏幕剪辑,显示了在只读模式下的字段(处于编辑模式)。 单击“保存”按钮,我收到验证错误消息,该字段为必填字段。
任何想法这怎么可能发生? 我可以使用相同的布尔值来设置required属性,该值确定渲染状态...因此仅在渲染状态时才需要...但是由于此问题是间歇性的...我不知道这是否真的有帮助。
我还验证了页面上的其他任何组件都不会无意中使用标签值“ Business Area”(在验证消息中使用了该值)来误导我其中哪个组件确实具有空值; 这是唯一一个带有“业务区域”标签的标签。
我弄清楚了这个问题正在发生什么。
在提交表单并收到验证错误之前。 我进行了更改,导致控制两个组件可见性的标志被颠倒了。
rendered="#{shiftDetailsController.canEditBusinessArea}"
换句话说,我在表单上执行的操作导致canEditBusinessArea
更改值。 但是,我没有重新渲染面板组(“ baGroup”)以使UI反映更新。
因此,当我提交表单时,在验证阶段就认为该组件是必需的……触发验证发生。 一旦将“ baGroup”添加到翻转编辑业务区域标志的操作的reRender中,UI就开始反映该更新,并且所提交的表单具有该值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.