3

我有一个单选按钮列表,想根据支持 bean 方法的结果禁用一些项目。

<h:selectOneRadio value="#{managedBean.selectedItem}">
    <f:selectItems value="#{managedBean.selectItems}"
                   var="x"  
                   itemDisabled="#{managedBean.checkIncompatible(x)}" />
</h:selectOneRadio> 

这是正确的方法吗?意思是,此代码是否会调用列表中的checkIncompatible(x)每个项目并将该项目设置为启用/禁用或仅设置一次,仅此而已?xselectItems

我只设法让所有按钮启用或禁用,我怀疑该方法只被调用一次。或者我的其余代码并不像我想象的那么完美。这需要更长的时间才能解决。

4

1 回答 1

2

我无法使用以下视图在 Mojarra 2.1.4 上重现您的问题:

<h:selectOneRadio value="#{bean.item}">
    <f:selectItems value="#{bean.items}" var="item" 
        itemDisabled="#{bean.isDisabled(item)}" />
</h:selectOneRadio>

和以下豆:

private String[] items = { "one", "two", "three" }; // +getter
private String item; // +getter+setter

public boolean isDisabled(String item) {
    return "two".equals(item);
}

上面的例子正确地禁用了 item two

因此,您的问题是在其他地方引起的,可能是由checkUncompatible()方法中的错误引起的。该方法的断点告诉我,它肯定是为每个项目调用的。

于 2011-11-24T13:39:32.947 回答