2010-12-03 47 views
1

Après avoir lu this answer, je suis toujours perplexe. Je suis d'accord que JSTL devrait être évité et de comprendre comment son évaluation se produit dans la mauvaise phase. Cependant, selon le documentation sur le site de développement des facelets, il semble que les tags <ui:fragment> ne prennent en charge que deux attributs, id et binding. Donc, même si certaines implémentation supportent rendered, il semble que vous seriez tentant d'en faire usage. L'autre suggestion était d'utiliser <h:panelGroup>, cependant, qui insère un élément <div> dans la réponse, ce qui pourrait provoquer des effets secondaires indésirables (comme changer votre contenu de inline à bloquer). Est-ce que quelqu'un sait un moyen de contourner cela? En particulier, je tentais les éléments suivants:Composant personnalisé Facelet - empêcher le rendu

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns:ice="http://www.icesoft.com/icefaces/component" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 
    <ui:composition> 
    <ice:selectOneListbox binding="#{binding}" rendered="#{modeExisting}"> 
     <f:selectItems 
     value="#{binding.allTagsSelectItems}" /> 
    </ice:selectOneListbox> 
    <ice:inputText binding="#{binding.name}" /> 
    <ice:inputText binding="#{binding.description}" /> 
    </ui:composition> 
</html> 

Ce qui est essentiellement une zone de liste utilisée pour sélectionner un élément avec un nom et une description qui, lorsqu'il est sélectionné permettra à l'utilisateur de les modifier. Je pourrais mettre un <ice:panelGroup> autour du bloc, et utiliser l'attribut rendu de celui-ci, mais encore une fois, il pourrait y avoir des effets secondaires de l'injection de cette div supplémentaire. Y a-t-il un moyen de faire fonctionner cela?

En outre, il peut être utile de mentionner que j'utilise le composant ci-dessus personnalisé associé à ce Facelet-taglib:

<?xml version="1.0"?> 
<!DOCTYPE facelet-taglib PUBLIC 
"-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN" 
"http://java.sun.com/dtd/facelet-taglib_1_0.dtd"> 

<facelet-taglib> 
    <namespace>http://www.mitre.org/asias/jsf</namespace> 
    <tag> 
    <tag-name>configurationTagEditor</tag-name> 
    <source>../component/configurationTagEditor.xhtml</source> 
    </tag> 
    <tag> 
    <tag-name>configurationTagSelector</tag-name> 
    <source>../component/configurationTagSelector.xhtml</source> 
    </tag> 
    <tag> 
    <tag-name>configurationTagRegexTable</tag-name> 
    <source>../component/configurationTagRegexTable.xhtml</source> 
    </tag> 
</facelet-taglib> 

Pour me permettre d'utiliser dans mon jsf xhtml:

... 
<ice:panelTab label="Existing" styleClass="configurationTagsExisting"> 
    <m:configurationTagEditor tag="#{configuration.existingTag}" /> 
</ice:panelTab> 
... 

Répondre

0

l'autre suggestion était d'utiliser <h:panelGroup>, cependant, qui insère un élément <div> dans la réponse

Le <h:panelGroup> ne restitue pas un <div> par défaut. Il rend seulement que si vous ajoutez layout="block". Pour tous les autres attributs HTML (tels que id, styleClass, etc.), il affiche uniquement un <span>. Si aucun attribut layout n'est présent et que tous les autres attributs HTML sont absents, cela signifie rien.

+0

Merci, je n'étais pas au courant. Mon matériel de référence était celui de Icefaces plutôt que JSF directement et la documentation de icefaces pour l'élément panelGroup correspondant dit: "Le composant panelGroup rend un élément" div "autour de ses composants enfants, produisant la valeur de l'attribut" style "comme valeur de l'attribut "style" et la valeur de l'attribut "styleClass" en tant que valeur de l'attribut "class". " Encore une fois, merci, je vais utiliser le panelGroup JSF à cette fin. – Lucas

+0

C'est la description de 'ice: panelGroup', pas' h: panelGroup'. Vérifiez ici: http://download.oracle.com/javaee/6/javaserverfaces/2.0/docs/pdldocs/facelets/index.html – BalusC