Ответ 1
Ваша проблема заключается в том, как привязка стоимости выполняется в JSF. Предпочтительным способом является получение выражения EL, для которого атрибут был заполнен вызовом getValueExpression("attributeName")
. Затем это выражение EL можно использовать для получения или установки значения в базе bean. Поскольку ваш не проходящий #{!isButtonEnabled}
, но #{cc.attrs.disabled}
до ice:commandButton
, сбой не выполняется.
Я решил это для компонента p:selectOneMenu
в Primefaces, написав wrapping UIComponent
, который определяет свойство wrappedValue
и передал это свойство в p:selectOneMenu
. В getter и setter этого свойства я затем использовал getValueExpression
, чтобы вернуть реальное выражение EL для атрибута.
<composite:interface componentType="de.gw2tome.component.valuewrapper">
<composite:attribute name="value" type="de.gw2tome.models.Rarity"
required="true" />
</composite:interface>
<composite:implementation>
<p:selectOneMenu value="#{cc.wrappedValue}"/>
...
</composite:implementation>
@FacesComponent("de.gw2tome.component.valuewrapper")
public class ValueWrapper extends UINamingContainer {
public void setWrappedValue(Object wrappedValue) {
ValueExpression expr = getValueExpression("value");
ELContext ctx = getFacesContext().getELContext();
expr.setValue(ctx, wrappedValue);
}
public Object getWrappedValue() {
ValueExpression expr = getValueExpression("value");
ELContext ctx = getFacesContext().getELContext();
return expr.getValue(ctx);
}
}
Теперь компонент можно использовать следующим образом:
<g:rarityChooser value="#{itemSearchBean.minRarity}" />