我有一个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
,并将该项设置为启用/禁用或仅设置一次,那就是那个?
我只设法启用或禁用所有按钮,我怀疑该方法只被调用一次。或者我的其余代码并不像我想要的那样完美。这将需要更长的问题才能解决。
答案 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()
方法中的错误。该方法的一个断点告诉我,它肯定会为每个项目调用。