开发者

What is the analog of jsp .tag-files in jsf or how to avoid coping and pasting jsf/facelets code?

开发者 https://www.devze.com 2022-12-16 22:13 出处:网络
I think the title is clear enough so I only add an example of typical situation. First block of code: <div id=\"mailpanel\">

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).


<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 -->


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

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号