我认为标题很清楚,所以我只添加一个典型情况的例子。
第一段代码:
<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也有一个超类,并且在这个示例方法中使用的所有代码实际上都是该超类的方法)。
答案 0 :(得分:2)
<ui:include src="commonFile.jsp">
<ui:param name="reportsBean" value="#{projectReports}" />
</ui:include>
并在commonFile.jsp
中:
<h:commandLink id="sendlink" value="#{msg['mail.sendLink']}"
action="#{reportsBean.sendMail}" />
你不能,唉,指明准确包含哪些参数。这就是我使用以下做法的原因:每当你添加一个参数时,你都会在commonFile.jsp
的顶部放置注释,说明名称,类型和必需/可选。例如:
<!-- param: reportsBean, required -->
<!-- param: showLegend, optional, default: false, type: boolean -->
答案 1 :(得分:1)
在JSP中,您可以使用custom tags。在Facelets中,您可以使用templating或JSF 2.0 composite components来实现此目的。