gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:26:37 25 4
gpt4 key购买 nike

我正在使用 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/

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