Что является аналогом jsp .tag-файлов в jsf или как избежать копирования и вставки кода jsf/facelets?
Я думаю, что название достаточно ясно, поэтому я только добавлю пример типичной ситуации.
Первый блок кода:
<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>
Как вы можете видеть, оба блока кода почти одинаковы, но каждый из них использует разные компоненты поддержки (но даже компоненты имеют суперкласс, и все используемые в этом примере методы на самом деле являются методами этого суперкласса).
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 -->
В JSP вы можете использовать собственные теги для этого. В Facelets для этого вы можете использовать шаблоны или составные компоненты JSF 2.0.