Alternative à l'interface utilisateur: fragment dans JSF

Je cherche un moyen pris en charge pour rendre une section de code dans JSF, j'utilise généralement cette approche:

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

Depuis ui: fragment ne supporte pas le rendu de la plupart des IDE (comme netbeans le marquer comme erreur mais cela fonctionne car dans JSF les paramètres sont hérités.

Une façon de résoudre ce problème est d'utiliser une autre structure (par exemple, si vous utilisez la COUTURE) vous pouvez utiliser

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

Une autre façon est de définir le rendu dans tout le contenu interne comme ceci:

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

Mais je n'aime pas cette façon parce que vous devez ajouter le rendu à chaque élément.

Une autre façon serait d'utiliser <c:if test="#{condtion}"> mais c: si vous supprimez les éléments de L'arborescence JSF et ce n'est pas ce que vous voulez toujours faire surtout si vous utilisez AJAX.

Donc vous avez une autre solution?

23
demandé sur CoolBeans 2010-09-15 02:48:04

1 réponses

puisque ui:fragment ne prend pas en charge la plupart des IDE rendus (comme Netbeans le marquent comme erreur mais cela fonctionne car les paramètres JSF sont hérités)

C'est en fait un bug dans la déclaration de fichier de balises Facelets JSF 2.0 (dans Mojarra, c'est le fichier com/sun/faces/metadata/taglib/ui.taglib.xml). L'attribut rendered est négligé et manquant dans la déclaration du fichier de balise (et aussi dans la documentation JSF 2.0 <ui:fragment> tag ), alors qu'il est vraiment présent dans le UIComponent. La validation IDE est basé sur les déclarations de fichier de balise et donc il donne une erreur de validation trompeuse. Ce problème est corrigé dans JSF 2.1, l'attribut manquant est ajouté à la déclaration du fichier de balise (et également dans la documentation JSF 2.1 <ui:fragment> tag ).

Si ignorer simplement les Avertissements IDE ou mettre à niveau vers JSF 2.1 n'est pas une option, alors vous pouvez envisager d'utiliser le composant <h:panelGroup> à la place:

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

Il ne génère rien de toute façon si vous ne spécifiez pas le id, style, styleClass et comme les attributs, sinon un simple <span> sera rendu.

Si tout ce que vous avez Est du HTML vanillé (c'est-à-dire pas de composants JSF), vous pouvez également envisager d'utiliser <f:verbatim>.

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

Cependant, le <f:verbatim> est obsolète dans JSF 2.0 (qui à son tour a aussi un bug documentaire d'ailleurs, le JSF 2.0 <f:verbatim> documentation de balise {[25] } ne mentionne pas la dépréciation, mais le JSF 2.1<f:verbatim> documentation de balise fait).

52
répondu BalusC 2013-04-08 11:07:07