Pasar la expresión EL al componente compuesto

todavía estamos en un escenario de migración JSF 1.2 a 2.0 y ahora nos enfrentamos a un problema relacionado con las variables c: set o ui: param utilizadas dentro de una expresión EL.

Aquí están los hechos. Hay un botón como componente compuesto:

<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>

Ahora estamos tratando de usar este componente de botón dentro de una barra de herramientas. El estado deshabilitado del botón se determina dentro de la barra de herramientas utilizando un c: set o un ui: param (ya lo intentamos en ambos sentidos).

<c:set var="isButtonEnabled" value="#{backingBean.buttonEnabled}" />
or
<ui:param name="isButtonEnabled" value="#{backingBean.buttonEnabled}" />

#{isButtonEnabled}

<ctrl:button
    ...
    disabled="#{!isButtonEnabled}"
    ... />

Así que aquí está nuestro problema. Si simplemente imprimimos el valor de "isButtonEnabled" en la barra de herramientas, siempre es correcto. Entonces el frijol de respaldo está bien. Pero cuando intentamos pasar este valor al componente compuesto, no funciona. "Deshabilitado" siempre se evalúa como falso.

Asegúrese de que podríamos pasar la expresión del método directamente (# {! BackingBean.isButtonEnabled}) y esto funcionará bien. Pero en nuestro escenario, la determinación de la bandera habilitada es mucho más complicada y solo intenté mantener el ejemplo lo más simple posible. Además, esta bandera se usa para varios botones dentro de la barra de herramientas, por lo que queríamos mantener el código mantenible mediante el uso de c: set o ui: param. ¿Es esta la forma incorrecta de manejar esto? ¿Que recomiendas

Gracias por adelantado

Sombra delgad

Respuestas a la pregunta(2)

Su respuesta a la pregunta