views:

75

answers:

2

I think the title is clear enough so I only add an example of typical situation.

First block of 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>

Second (copied) block of 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>

As you can see both blocks of code are almost similar but each of them uses different backing bean (but even beans have a superclass and all used in this example methods are actually methods of that superclass).

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

and in the commonFile.jsp you have:

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

You cannot, alas, specify what params exactly are to be included. That's why I'm using the following practice: whenever you add a parameter, you put a comment ontop of the commonFile.jsp stating the name, the type and the required/optional. For example:

<!-- param: reportsBean, required -->
<!-- param: showLegend, optional, default: false, type: boolean -->
Bozho
Is there any way to specify appliable params and their types in commonFile.xhtml?
Roman
no. I'm using comments ontop. see my updated answer for that matter.
Bozho
+1  A: 

In JSP, you can use custom tags for this. In Facelets, you can use templating or the JSF 2.0 composite components for this.

BalusC
aren't composite components JSF 2.0? Not that the OP mentioned what version he is using.. :)
Bozho
Right, updated the answer.
BalusC