мы все еще находимся в сценарии миграции JSF с 1.2 на 2.0, и теперь мы столкнулись с проблемой, связанной с переменными c: set или ui: param, используемыми внутри выражения EL.
Вот факты. В качестве составного компонента есть кнопка:
<cc:interface name="button" shortDescription="A button.">
...
<cc:attribute
name="disabled"
required="false"
default="false"
shortDescription="The disabled flag." />
...
</cc:interface>
<cc:implementation>
<ice:commandButton
...
disabled="#{cc.attrs.disabled}"
... />
</cc:implementation>
Теперь мы пытаемся использовать этот компонент кнопки внутри панели инструментов. Отключенное состояние кнопки определяется внутри панели инструментов с помощью c: set или ui: param (мы уже пробовали оба способа).
<c:set var="isButtonEnabled" value="#{backingBean.buttonEnabled}" />
or
<ui:param name="isButtonEnabled" value="#{backingBean.buttonEnabled}" />
#{isButtonEnabled}
<ctrl:button
...
disabled="#{!isButtonEnabled}"
... />
Итак, вот наша проблема. Если мы просто распечатаем значение «isButtonEnabled» на панели инструментов, это всегда правильно. Так что с бобом все в порядке. Но когда мы пытаемся передать это значение составному компоненту, оно не работает. «Отключено» всегда оценивается как ложное.
Конечно, мы могли бы передать выражение метода напрямую (# {! BackingBean.isButtonEnabled}), и это будет работать нормально. Но в нашем сценарии определение флажка enabled гораздо сложнее, и я просто попытался сделать пример как можно более простым. Кроме того, этот флаг используется для нескольких кнопок на панели инструментов, поэтому мы хотели сохранить код поддерживаемым, используя c: set или ui: param. Это неправильный способ справиться с этим? Что вы рекомендуете?
Заранее спасибо.
SlimShady