要求是有条件地跳过字段验证.当用户选择添加时,应验证表单字段并将值添加到表中.如果单击编辑,则应跳过表单字段验证,但应将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}"/>
Run Code Online (Sandbox Code Playgroud)
名称输入复合组件
<h:inputText id="fName" value="#{bean.fname}">
<f:validateBean disabled="#{cc.attrs. disableBeanValidation}"/>
</h:inputText>
Run Code Online (Sandbox Code Playgroud)
如果用户输入详细信息并选择添加,则会将详细信息添加到表中.如果验证错误,我们会显示错误消息.
然后用户选择编辑,将值复制到输入字段.用户选择取消编辑,将从输入字段中删除值.如果用户再次选择编辑,我们会得到索引超出范围的异常错误.为name_firstName索引超出范围的异常.
但是,如果用户选择添加和取消编辑,则不会发生这种情况.是否与传递的视图参数有关,某种方式为null?
javax.faces.FacesException:使用标识为frmAddAuthBuyerBR_inpAuthBuyerBRName_prefix_input的组件恢复状态时出现意外错误.原因:java.lang.IndexOutOfBoundsException:Index:0,Size:0 at com.sun.faces.application.view.StateManagementStrategyImpl $ 2.visit(StateManagementStrategyImpl.java:272)at com.sun.faces.component.visit.FullVisitContext .invokeVisitCallback(FullVisitContext.java:151)位于javax.faces.component(UIComponent.java:1612)的javax.faces.component.UIComponent.visitTree(UIComponent.java:1612),位于javax.faces.component的javax.faces.component.UIComponent.visitTree(UIComponent.java:1626). UIComponent.visitTree(UIComponent.java:1626)位于javax.faces.component(UIComponent.java:163)的javax.faces.component.UINamingContainer.visitTree(UINamingContainer.java:163),位于javax.faces.component的javax.faces.component.UIComponent.visitTree(UIComponent.java:1626) .UIComponent.visitTree(UIComponent.java:
您的代码不完整,因为您无法展示如何disableBeanValidation实施以及如何传递#{param[skipBeanValidation]}.
但它应该基本归结为:
<f:validateBean disabled="#{param.skipBeanValidation}" />
...
<h:commandLink value="Edit" action="#{buyerBacking.edit}"/>
<f:param name="skipBeanValidation" value="true" />
</h:commandLink>
Run Code Online (Sandbox Code Playgroud)
请注意,这#{param.skipBeanValidation}与#{param[skipBeanValidation]}(但相同#{param['skipBeanValidation']})完全不同.另请注意,跳过bean验证所需的请求参数已作为HTTP请求参数传递,完全如预期的那样#{param}.
| 归档时间: |
|
| 查看次数: |
2798 次 |
| 最近记录: |