gpt4 book ai didi

jsf-2 - 如果实体的所有字段都为空,如何跳过 bean 验证?

转载 作者:行者123 更新时间:2023-12-05 00:29:19 24 4
gpt4 key购买 nike

我有一个这样的地址实体:

@Entity
public class Address implements java.io.Serializable {
@Id @GeneratedValue(strategy = IDENTITY)
private Long id;

@Size(max = 100)
private String street;

@Size(max = 15)
private String nr;

@Field
@Size(min = 1, max = 20) @NotBlank
private String city;
}

这是其他几个实体的一部分。对于这样的实体,地址是可选的。
我有一个 View ,我们的用户可以通过几个表单输入来编辑整个实体,包括几个地址字段。

为了能够编辑地址,我使用空地址实体初始化父实体。

现在的问题是:我不想坚持 Address当所有地址字段都为空时,在实体上。为此,当(且仅当) Address 的所有字段时,我需要跳过对实体的验证。是空的。我如何以最优雅的方式做到这一点?

我目前正在做的是使用 <o:validateBean disabled="true" /> 完全跳过 bean 验证。对于提交按钮,将地址设置为 null如果它出来是空的。但这听起来像是完全破解,因为它在所有情况下都禁用了所有验证。我怎样才能做得更好?

最佳答案

您可以在 disabled 中使用 EL <f:validateBean> 的属性(和 <o:validateBean> )。您可以使用 EL 检查是否已填写任何这些字段。您可以使用 binding属性来引用 EL 中的组件。您可以通过检查与组件的客户端 ID 关联的请求参数的值来检查某个字段是否已填充。

然后,当 #{addressIsEmpty} 时禁用对这些字段的 bean 验证评估 true ,使用更方便 <f:validateBean>而不是 <o:validateBean>因为前者可用于包装多个输入组件。

所以,总而言之,这应该做:

<c:set var="addressIsEmpty" value="#{empty param[street.clientId] and empty param[nr.clientId] and empty param[city.clientId]}" />

<f:validateBean disabled="#{addressIsEmpty}">
<h:inputText binding="#{street}" value="#{bean.address.street}" />
<h:inputText binding="#{nr}" value="#{bean.address.nr}" />
<h:inputText binding="#{city}" value="#{bean.address.city}" />
</f:validateBean>
<o:validateBean>如果您打算在每个输入或每个命令的基础上控制它,它只会更容易使用。

关于jsf-2 - 如果实体的所有字段都为空,如何跳过 bean 验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17492169/

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