【问题标题】:JSF 2.1 conditional field validationJSF 2.1 条件字段验证
【发布时间】: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


【解决方案1】:

您可以编写一个custom validator,它检查父 UI 组件并仅在特定条件下执行验证。这很复杂。也许看看ExtVal 及其@SkipValidation 注释?

@SkipValidation("#{person.role eq 'admin'}")
@Required
@Equals("person.password")
@NotEquals("password")
private String oldPassword;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多