установить itemDisabled из метода поддержки компонентов для каждого элемента в списке - PullRequest
3 голосов
/ 24 ноября 2011

У меня есть список радиокнопок, и я хотел бы отключить некоторые элементы в соответствии с результатом метода поддерживающего компонента.

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

Это правильный способ сделать это?Это значит, будет ли этот код вызывать checkIncompatible(x) для каждого x из списка selectItems и устанавливать этот элемент как включенный / отключенный или только один раз, и все?

Мне удалось включить или отключить все кнопки, и я подозреваю, что метод вызывается только один раз.Или что остальная часть моего кода не так совершенна, как мне хотелось бы верить.И это займет гораздо больше времени, чтобы исправить.

1 Ответ

2 голосов
/ 24 ноября 2011

Я не могу воспроизвести вашу проблему на 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);
}

В приведенном выше примере корректно отключается элемент two.

Итак, ваша проблема вызвана в другом месте, возможно, ошибкой в ​​методе checkUncompatible().Точка останова на методе учит меня, что он определенно вызывается для каждого элемента.

...