2010-09-20 4 views
1

J'ai créé un tag Facelet pour rendre une textinput avec une étiquette. Cela est très utile lorsque vous évitez de répéter le même code encore et encore.Quelle est la meilleure façon de créer des multi-usages balises personnalisées Facelet paramétrisé

Bien que je me bats avec la manipulation différents cas d'utilisation dans cet onglet unique (date par rapport texte, requis par rapport non requis, etc. textarea par rapport texte normal)

J'ai fini d'avoir plusieurs balises dans mon composant tout avec plus ou moins complexe rendu attribut, comme montré ici:

<h:inputText  
      onblur="makeNotEmpty(this)" 
      onfocus="makeNotEmptyFocus(this)" 
      id="#{cid}" 
      value="#{value}" 
      rendered="#{textarea!='true' and type!='email' and notrequired!='true' and nullablenumber!='true'}" 
      style="#{style }" 
      required="true" 
      disabled="#{disabled }">   
      <f:validator validatorId="notnull"/>  

    </h:inputText> 
    <h:inputText      
     onblur="  
      makeNotEmpty(this)" 
     onfocus="makeNotEmptyFocus(this)" 
     id="#{cid}" 
     value="#{value}" 
     rendered="#{type=='email'}" 
     style="#{style }" 
     required="true" 
     disabled="#{disabled }">    
     <f:validator validatorId="email" /> 
     <f:validator validatorId="notnull"/> 
    </h:inputText> 

Bien sûr, ce n'est pas optimal et plutôt fastidieux d'écrire. Un autre problème est que cette approche a plusieurs composants avec le même ID dans l'arborescence des composants (je ne suis pas sûr si c'est un problème car un seul élément ayant le même ID est rendu en même temps mais j'en ai vu problèmes étranges recréant l'arbre de la page me faisant belive c'est un problème)

J'utilise ICEFaces 1.8.2 (mais le problème devrait être mise en œuvre indépendante). Quelle est la solution pour cela? En utilisant ? Autre chose? Merci!

Répondre

1

Vous pouvez mettre <f:validator> dans un JSTL <c:if>. Il sera créé au cours de la construction du tag.

<html xmlns:c="http://java.sun.com/jsp/jstl/core"> 
... 
<c:if test="#{type eq email}"><f:validator validatorId="email" /></c:if> 

Par ailleurs, Icefaces n'est pas une implémentation de JSF, il est une bibliothèque de composants JSF qui est censé fonctionner sur une mise en œuvre JSF .. Mojarra et MyFaces sont mises en œuvre JSF.

+0

merci, c'est comme ça que je vais le faire. et je n'ai jamais appelé ICEfaces une implémentation JSF;) mon problème original n'a pas été résolu par cela bien que ... J'ai trouvé le problème: c'est que ICEFaces semble avoir des problèmes quand vous avez un avec une liaison et quand ce panelGroup contient des composants facelet. Ayant ce scénario j'ai toujours eu le problème que l'arbre de composant a été complètement foiré quand la page a été reconstruite (c'était OK la première fois que je visite la page). Avec foiré je veux dire que certains contrôles ne sont pas affichés du tout ou les étiquettes ont été rendus comme des boutons aussi, probablement un bug IceFaces – hugri

+0

Votre phrase * J'utilise ICEFaces 1.8.2 (mais le problème devrait être indépendant de l'implémentation) * était suggérant que. En outre, je ne fais pas IceFaces, donc je ne peux pas entrer dans les détails de ce problème. – BalusC

+0

pas de problème, merci quand même! – hugri

Questions connexes