JSF 2.1 条件字段验证
Posted
技术标签:
【中文标题】JSF 2.1 条件字段验证【英文标题】:JSF 2.1 conditional field validation 【发布时间】:2011-10-11 09:41:08 【问题描述】:我有以下 JSF 2.1 页面
<h:selectOneRadio value="#userBean.newUser">
<f:selectItem itemValue="0" itemLabel="new User" />
<f:selectItem itemValue="1" itemLabel="existing User" />
</h:selectOneRadio>
<br />
<h:inputText value="#userBean.customerId" id="customerId" />
<h:message for="customerid" />
<br />
<h:inputText value="#userBean.firstName" id="firstName" />
<h:message for="fisrtName" />
<br />
<h:inputText value="#userBean.lastName" id="lastName" />
<h:message for="lastName" />
<br />
<h:commandButton value="Submit" action="#userBean.login" />
这是我的豆子:
public class UserBean
private String customerId;
private String newUser= "0";
private String firstName;
private String lastName;
// Getters and seeters ommited.
我需要通过以下方式验证此表单:
如果选择了“新用户”单选按钮,则应验证所有表单输入。如果选择“现有用户”,我只需要验证客户 ID。
我尝试了 Hibernate Validation,还尝试了通过实现 javax.faces.validator.Validator
接口的自定义验证器。
我能以某种方式实现这样的功能吗?
【问题讨论】:
自定义验证器有什么问题..?为什么要将新用户的标志存储在字符串中? 如何有条件地设置自定义验证器?将其存储为字符串有什么问题? 好吧,我会使用布尔值或通过用户的 id 查找...无论如何.. 如果您的用户已经存储在数据库中,您不能检查您的验证器,即有一个 ID,如果没有 - 验证所有字段,如果是 - 只验证客户 ID 字段 您可以检查条件(读取父组件属性),并且只有通过运行验证逻辑。如果验证失败,此逻辑将抛出 ValidationException。 谢谢,我解决了这个问题。 【参考方案1】:您可以编写一个custom validator,它检查父 UI 组件并仅在特定条件下执行验证。这很复杂。也许看看ExtVal 及其@SkipValidation
注释?
@SkipValidation("#person.role eq 'admin'")
@Required
@Equals("person.password")
@NotEquals("password")
private String oldPassword;
【讨论】:
以上是关于JSF 2.1 条件字段验证的主要内容,如果未能解决你的问题,请参考以下文章