gpt4 book ai didi

jsf-2 - 有条件地跳过验证 JSF

转载 作者:行者123 更新时间:2023-12-02 19:34:57 24 4
gpt4 key购买 nike

要求是有条件地跳过字段验证。当用户选择添加时,应验证表单字段并将值添加到表中。如果单击编辑,则应跳过表单字段验证,但应将 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 的索引越界异常。

但是,如果用户选择添加并选择取消编辑,则不会发生这种情况。这是否与传递的 View 参数(不知何故为空)有关?

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]}

但它基本上应该归结为:

<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['相同)跳过BeanValidation']})。另请注意,跳过 Bean 验证所需的请求参数作为 HTTP 请求参数传递,与 #{param} 所期望的完全一样。

关于jsf-2 - 有条件地跳过验证 JSF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13240701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com