java - 如何让h的required属性为:inputText depend on certain set of values from h:selectOneMenu?

标签 java validation jsf jsf-2

我正在使用 JSF 2.0。

我的页面上有一个 h:selectOneMenu,其中包含值列表,并且同一页面上有一个 h:inputText,其 required 应取决于 h:selectOneMenu 当前选择的值。只有一组特定的值应该触发必需的检查,其他值则不会。

这是我尝试过的:

<h:inputText ... required="#{(selectedPaymentType.value == 'some value') || (selectedPaymentType.value == 'other value')}" />

在上面的代码中,#{selectedPaymentType} 是在 h:selectOneMenu 绑定(bind)中定义的。

还有 3 个类似的值,它们应该将 required 属性触发为 true。这看起来有点笨拙。有更好的方法吗?

最佳答案

Fant 已经给出了正确方向的提示,您应该使用具有 required 的枚举。属性,但似乎您并不完全确定如何正确实现它。诚然,范特的回答还不够详尽。所以这里有一个更详细的答案。

基本上,您需要将所有下拉值替换为如下所示的枚举:

public enum PaymentType {
    FOO("Some label for foo", true),
    BAR("Some label for bar", false),
    BAZ("Some label for baz", true);

    private String label;
    private boolean required;

    private PaymentType(String label, boolean required) {
        this.label = label; 
        this.required = required;
    }

    public String getLabel() { 
        return label;
    }

    public boolean isRequired() {
        return required;
    }
}

并按如下方式使用

<h:selectOneMenu binding="#{selectedPaymentType}" value="#{bean.selectedPaymentType}">
    <f:selectItems value="#{bean.availablePaymentTypes}" var="paymentType"
        itemValue="#{paymentType}" itemLabel="#{paymentType.label}" />
</h:selectOneMenu>
<h:inputText ... required="#{selectedPaymentType.value.required}" />

private PaymentType selectedPaymentType; // +getter+setter

public PaymentType[] getAvailablePaymentTypes() { 
    return PaymentType.values();
}

(或者如果您使用 OmniFaces,请使用 <o:importConstants> ,那么您不需要 <f:selectItems> 这样的 getter ;不,您在任何情况下都不需要转换器,JSF/EL 已经内置了枚举转换)

看,required属性现在更加简化,因为它已经在与所选值关联的模型中定义。

关于java - 如何让h的required属性为:inputText depend on certain set of values from h:selectOneMenu?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13500213/

相关文章:

java - 获取今年的同一天

java - 项目 react 堆: onErrorResume after flatMap

java - JSF 值表达式和 bean,它们如何工作?

ajax - 如何检查 JSF 应用程序中的有效 session ?

javascript - 使用 Backbone Validation 插件选择性地验证模型属性?

java - 这是如何工作的,保持对请求数据的静态(全局)引用

java - Spring - 安全配置中定义的 Bean 创建顺序

java - 在给定条件下查找二维数组中路径的最大长度

javascript - 表单验证只能使用 type=button 而不能使用 type=submit?

php - 如何在cakephp中获取表单输入的值