tag que lib etiquetas ejemplo bean atributo jsf jsf-2 facelets tagfile methodexpression

jsf - que - taglib



Pasar la expresión del método EL como atributo del archivo de etiquetas Facele personalizado (1)

Mis preguntas son: ¿es esta la mejor manera de hacer esto?

Esa es la única manera de todos modos, siempre que solo pueda usar instalaciones JSF / EL estándar y no puede crear un manejador de etiquetas personalizado.

Sin embargo, podría crear un manejador de etiquetas personalizado para convertir la expresión de valor en una expresión de método. La biblioteca de utilidades OmniFaces JSF tiene un <o:methodParam> para exactamente este propósito. Consulte también la página de demostración de <o:methodParam> .

Entonces podrías terminar como:

<my:dataScroller ... scrollListener="#{bean.aMethod}" />

y

<o:methodParam name="scrollListenerMethod" value="#{scrollListener}" /> <rich:dataScroller ... scrollListener="#{scrollListenerMethod}" />

¿Cómo puedo hacer que el método sea opcional?

Teóricamente, podría usar etiquetas JSTL para construir la vista condicionalmente. Algo como:

<h:someComponent> <c:if test="#{not empty fooAttribute}"> <f:attribute name="foo" value="#{fooAttriubte}" /> </c:if> </h:someComponent>

Pero eso es en el caso particular de un atributo de oyente de expresión de método especial desafortunadamente no posible. No hay nada como <rich:scrollListener> o algo que le permita vincular un scrollListener específico de RichFaces como una etiqueta separada a la <rich:dataScroller> . Lo mejor que podría hacer sin crear manejadores de etiquetas personalizados es duplicar el conjunto <rich:dataScroller> en dos <c:if> s (o a <c:choose> ); uno con y otro sin scrollListener . Esto es muy torpe Sería mejor que <my:richScrollListener> gestor de etiquetas <my:richScrollListener> personalizado para esto, que luego podrías colocar en a <c:if> .

Creé una etiqueta JSF personalizada:

<ui:composition> <h:panelGroup> <rich:dataScroller id="#{id}" for="#{table}" execute="#{table}" page="#{scrollerPage}" render="#{table}-sc1" maxPages="5" fastControls="hide" oncomplete="#{onCompl}" scrollListener="#{scrollListenerBean[scrollListenerMethod]}" /> <h:inputText value="#{scrollerPage}" id="#{table}-sc1" size="2"> <f:convertNumber integerOnly="true" /> </h:inputText> <h:outputText styleClass="outputText" value=" of #{scrollPagesCount} " /> <h:commandButton value="GO! " /> </h:panelGroup> </ui:composition>

Para pasar el método del oyente, utilicé la solución sugerida en un blog bastante antiguo:

<my:dataScroller id="idDS1" table="table1" scrollerPage="#{bean.navigationHelper.scrollerPage}" scrollPagesCount="#{bean.navigationHelper.scrollPagesCount}" onCompl="initForm();" scrollListenerBean="#{bean}" scrollListenerMethod="aMethod" />

Mis preguntas son: ¿es esta la mejor manera de hacer esto? ¿Cómo puedo hacer que el método sea opcional?

¡Muchas gracias por cualquier ayuda! adiós!