2010-01-21 4 views
2

Je pense que le titre est assez clair pour que je n'ajoute qu'un exemple de situation typique.Quel est l'analogue de jsp .tag-fichiers dans jsf ou comment éviter de coping et coller le code jsf/facelets?

Premier bloc de code:

<div id="mailpanel"> 
    <h:panelGroup id="sendmailpane" styleClass="sendmailpane" layout="block" 
        rendered="#{userReports.reportRendered}"> 
     <o:inputTextarea promptText="#{msg['mail.listrules']}" promptTextStyle="color: #333" 
       value="#{userReports.mailingList}" styleClass="maillist"/> 
     <br/> 
     <h:commandLink id="sendlink" value="#{msg['mail.sendLink']}" 
        action="#{userReports.sendMail}"/> 
    </h:panelGroup> 
</div> 

Deuxième bloc (copié) de code:

<div id="mailpanel"> 
    <h:panelGroup id="sendmailpane" styleClass="sendmailpane" layout="block" 
        rendered="#{projectReports.reportRendered}"> 
     <o:inputTextarea promptText="#{msg['mail.listrules']}" promptTextStyle="color: #333" 
       value="#{projectReports.mailingList}" styleClass="maillist"/> 
     <br/> 
     <h:commandLink id="sendlink" value="#{msg['mail.sendLink']}" 
        action="#{projectReports.sendMail}"/> 
    </h:panelGroup> 
</div> 

Comme vous pouvez le voir les deux blocs de code sont presque similaires, mais chacun d'entre eux utilise différents backing bean (mais même les haricots ont une superclasse et tous les méthodes utilisées dans cet exemple sont en fait des méthodes de cette superclasse).

+0

Pourquoi avez-vous mentionné JSP et Facelets dans les balises? En réalité, vous ne pouvez pas les utiliser tous les deux simultanément. Ou avez-vous prévu des réponses pour les deux technologies de visualisation? – BalusC

Répondre

2
<ui:include src="commonFile.jsp"> 
    <ui:param name="reportsBean" value="#{projectReports}" /> 
</ui:include> 

et dans le commonFile.jsp vous avez:

<h:commandLink id="sendlink" value="#{msg['mail.sendLink']}" 
       action="#{reportsBean.sendMail}" /> 

Vous ne pouvez pas, hélas, préciser ce params exactement doivent être inclus. C'est pourquoi j'utilise la pratique suivante: chaque fois que vous ajoutez un paramètre, vous mettez un commentaire sur le commonFile.jsp indiquant le nom, le type et le requis/facultatif. Par exemple:

<!-- param: reportsBean, required --> 
<!-- param: showLegend, optional, default: false, type: boolean --> 
+0

Existe-t-il un moyen de spécifier les paramètres utilisables et leurs types dans commonFile.xhtml? – Roman

+0

no. J'utilise les commentaires ontop. voir ma réponse mise à jour d'ailleurs. – Bozho

1

Dans JSP, vous pouvez utiliser custom tags pour cela. Dans Facelets, vous pouvez utiliser templating ou le JSF 2.0 composite components pour cela.

+1

ne sont pas des composants composites JSF 2.0? Pas que l'OP mentionné quelle version il utilise .. :) – Bozho

+0

Droit, mis à jour la réponse. – BalusC

+0

Les composants composites sont géniaux car vous spécifiez explicitement leurs attributs facultatifs et obligatoires. –