为列表中的每个项目的backing bean方法设置itemDisabled

时间:2011-11-23 21:57:42

标签: jsf-2 backing-beans

我有一个radiobutton列表,并希望根据backing bean方法的结果禁用某些项目。

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

这是正确的方法吗?这意味着,此代码会从checkIncompatible(x)列表中为每个x调用selectItems,并将该项设置为启用/禁用或仅设置一次,那就是那个?

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

1 个答案:

答案 0 :(得分:2)

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

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

以及以下bean:

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

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

上面的示例正确地禁用了项目two

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