要求是有条件地跳过字段验证。当用户选择添加时,应验证表单字段并将值添加到表中。
如果单击编辑,则应跳过表单字段验证,但应将 bean 值复制到输入字段。
<composite:nameInput id="name" value="#{buyer.name}"
disableBeanValidation ="#{param['skipBeanValidation']}"/>
<h:commandLink action="#{buyerBacking.cancelEdit}" value="cancel"/>
<h:dataTable value="#{bean.list}">
<h:commandLink value="Edit" action="#{buyerBacking.edit}">
<f:param name="skipBeanValidation" value="true" />
</h:commandLink>
</h:dataTable>
<h:commandLink id="add" action="#{buyerBacking.add}"/>
名称 输入复合组件
<h:inputText id="fName" value="#{bean.fname}">
<f:validateBean disabled="#{cc.attrs. disableBeanValidation}"/>
</h:inputText>
如果用户输入详细信息并选择添加,详细信息将添加到表中。
如果验证错误,我们会显示错误消息。
然后用户选择编辑,值将复制到输入字段。
用户选择取消编辑,值将从输入字段中删除。
如果用户再次选择编辑,我们会收到索引越界异常错误。 name_firstName 的索引越界异常。
但如果用户选择添加并选择取消编辑,则不会发生这种情况。
这是否与传递的视图参数(不知何故为空)有关?
javax.faces.FacesException:恢复 ID 为 frmAddAuthBuyerBR_inpAuthBuyerBRName_prefix_input 的组件状态时出现意外错误。原因:java.lang.IndexOutOfBoundsException:索引:0,大小:0。
在 com.sun.faces.application.view.StateManagementStrategyImpl$2.visit(StateManagementStrategyImpl.java:272)
在com.sun.faces.component.visit.FullVisitContext.invokeVisitCallback(FullVisitContext.java:151)
在 javax.faces.component.UIComponent.visitTree(UIComponent.java:1612)
在 javax.faces.component.UIComponent.visitTree(UIComponent.java:1626)
在 javax.faces.component.UIComponent.visitTree(UIComponent.java:1626)
在 javax.faces.component.UINamingContainer.visitTree(UINamingContainer.java:163)
在 javax.faces.component.UIComponent.visitTree(UIComponent.java:1626)
在 javax.faces.component.UIComponent.visitTree(UIComponent.java:1626)
在 javax.faces.component.UIComponent.visitTree(UIComponent.java:1626)
在 javax.faces.component.UIComponent.visitTree(UIComponent.java:1626)
在 javax.faces.component.UINamingContainer.visitTree(UINamingContainer.java:163)
在 javax.faces.component.UIComponent.visitTree(UIComponent.java:1626)
在 javax.faces.component.UIComponent.visitTree(UIComponent.java:1626)
在 javax.faces.component.UIComponent.visitTree(UIComponent.java:1626)
在 javax.faces.component.UIForm.visitTree(UIForm.java:371)
在 javax.faces.component.UIComponent.visitTree(UIComponent.java:1626)
您的代码不完整,因为您无处展示如何disableBeanValidation
是如何实施的以及你如何通过#{param[skipBeanValidation]}
around.
但应该基本上归结为:
<f:validateBean disabled="#{param.skipBeanValidation}" />
...
<h:commandLink value="Edit" action="#{buyerBacking.edit}"/>
<f:param name="skipBeanValidation" value="true" />
</h:commandLink>
请注意#{param.skipBeanValidation}
与#{param[skipBeanValidation]}
(但与#{param['skipBeanValidation']}
)。另请注意,跳过 bean 验证所需的请求参数作为 HTTP 请求参数传递,与预期的完全一样#{param}
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)