【发布时间】: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。
-
谢谢,我解决了这个问题。
标签: java jsf jakarta-ee jsf-2 richfaces