Java jsf中jsp.tag文件的类似之处是什么,或者如何避免处理和粘贴jsf/facelets代码?

Java jsf中jsp.tag文件的类似之处是什么,或者如何避免处理和粘贴jsf/facelets代码?,java,jsp,jsf,facelets,Java,Jsp,Jsf,Facelets,我认为标题足够清楚,所以我只添加了一个典型情况的示例 第一段代码: <div id="mailpanel"> <h:panelGroup id="sendmailpane" styleClass="sendmailpane" layout="block" rendered="#{userReports.reportRendered}"> <o:inputTextarea promptText="#{msg[

我认为标题足够清楚,所以我只添加了一个典型情况的示例

第一段代码:

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


第二个(复制的)代码块:

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


正如您所看到的,这两个代码块几乎是相似的,但它们都使用不同的支持bean(但即使bean也有一个超类,并且在本例中使用的所有方法实际上都是该超类的方法)

遗憾的是,您不能指定要包含哪些参数。这就是为什么我要使用以下实践:无论何时添加参数,都要在
commonFile.jsp
的页面上添加注释,说明名称、类型和必需/可选项。例如:

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


在JSP中,您可以使用。在Facelets中,您可以使用或JSF2.0来实现这一点。

为什么在标记中同时提到JSP和Facelets?在现实中,你不能同时使用它们。或者您希望这两种视图技术都有答案吗?复合组件不是JSF2.0吗?并不是说OP提到了他使用的版本:)复合组件非常好,因为您可以显式地指定它们的可选属性和必需属性。有没有办法在commonFile.xhtml中指定可应用的参数及其类型?没有。我使用的是注释ontop。关于这个问题,请参阅我的最新答案。