2010-09-14 17 views
22

Estoy buscando una manera apoyado para hacer una sección de código en JSF, que suelen utilizar este enfoque:alternativa a la interfaz de usuario: fragmento de JSF

<ui:fragment rendered="#{condition}"> 
    <h:outputText value="text 1"/> 
    <h:outputText value="text 2"/> 
    <h:outputText value="text 3"/> 
</ui:fragment> 

Desde ui: fragmento no admite dejaron a la mayoría de IDE (como NetBeans marcarla como error, pero funciona porque en JSF se heredan parámetros.

Una manera de resolver esto es utilizar otra estructura (por ejemplo, si se utiliza SEAM) que puede utilizar

<s:div rendered="#{condition}"> 
    .... 
</s:div> 

Otra forma es establecer la dictada en todo el contenido interno de esta manera:

<h:outputText value="text 1" rendered="#{condition}"/> 
<h:outputText value="text 2" rendered="#{condition}"/> 
<h:outputText value="text 3" rendered="#{condition}"/> 

Pero no me gusta esta forma porque hay que añadir el prestado a cada elemento.

Otra forma sería usar <c:if test="#{condtion}"> PERO c: si elimina los elementos del árbol JSF y eso no es lo que siempre quiere hacer especialmente si utiliza AJAX.

¿Así que ustedes tienen otras soluciones?

Respuesta

46

Desde ui:fragment no soporta dictó la mayoría de IDE (como Netbeans marcarla como error, pero funciona porque en JSF se heredan parámetros)

Esto es en realidad un error en JSF 2.0 Facelets declaración de archivo de etiqueta (en Mojarra, ese es el archivo com/sun/faces/metadata/taglib/ui.taglib.xml). El atributo rendered se pasa por alto y falta en la declaración del archivo de etiqueta (y también en el JSF 2.0 <ui:fragment> tag documentation), mientras que es realmente presente en el UIComponent. La validación IDE se basa en las declaraciones del archivo de etiqueta y, por lo tanto, da un error de validación engañoso. Este problema se corrigió en JSF 2.1, el atributo que falta se agrega a la declaración del archivo de etiqueta (y también en el JSF 2.1 <ui:fragment> tag documentation).

Si bien simplemente haciendo caso omiso de las advertencias IDE o actualizar a JSF 2.1 no es una opción, entonces se puede considerar el uso de the <h:panelGroup> component lugar:

<h:panelGroup rendered="#{condition}"> 
    <h:outputText value="text 1"/> 
    <h:outputText value="text 2"/> 
    <h:outputText value="text 3"/> 
</h:panelGroup> 

Genera nada de todos modos si no se especifica el id, style , styleClass y atributos similares, de lo contrario se representará un simple <span>.

Si todo lo que tiene es simple HTML plano (es decir, no tiene componentes JSF), entonces también puede considerar usar <f:verbatim>.

<f:verbatim rendered="#{condition}"> 
    text 1 
    text 2 
    text 3 
</f:verbatim> 

Sin embargo, el <f:verbatim> es desuso en JSF 2.0 (que a su vez tiene también un error documental por el camino, la JSF 2.0 <f:verbatim> tag documentation no menciona deprecation, pero el JSF 2.1 <f:verbatim> tag documentation hace).

Cuestiones relacionadas