You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在同一Facelets文件内复用代码块?(JSF 2.1+PrimeFaces 10)

在同一Facelets文件中定义复用代码块的实现方案

可以实现,无需创建单独文件,利用JSF 2.1原生的Facelets标签即可完成。以下是两种常用方式:

方式一:使用<ui:composition> + <ui:include>

这种方式通过定义带参数的可复用片段,再引用当前文件并传递参数:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets">

    <!-- 定义可复用代码块:通过ui:param接收后缀文本 -->
    <ui:composition id="repeatableSection">
        Make your choice #{empty suffix ? '' : ' ' += suffix}
    </ui:composition>

    <!-- 第一次引用:无后缀 -->
    <ui:include src="#{view.viewId}" id="section1">
        <ui:param name="suffix" value="" />
    </ui:include>

    <!-- 第二次引用:添加"of cars"后缀 -->
    <ui:include src="#{view.viewId}" id="section2">
        <ui:param name="suffix" value="of cars" />
    </ui:include>

    <!-- 第三次引用:添加"of houses"后缀 -->
    <ui:include src="#{view.viewId}" id="section3">
        <ui:param name="suffix" value="of houses" />
    </ui:include>

</html>

方式二:使用<ui:composition> + <ui:decorate>

这种方式通过<ui:insert>预留占位,再用<ui:define>填充内容:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets">

    <!-- 定义可复用代码块:预留additionalText占位符 -->
    <ui:composition id="repeatableSection">
        Make your choice <ui:insert name="additionalText" />
    </ui:composition>

    <!-- 第一次使用:空占位符 -->
    <ui:decorate template="#{view.viewId}" id="use1">
        <ui:define name="additionalText"></ui:define>
    </ui:decorate>

    <!-- 第二次使用:填充" of cars" -->
    <ui:decorate template="#{view.viewId}" id="use2">
        <ui:define name="additionalText"> of cars</ui:define>
    </ui:decorate>

    <!-- 第三次使用:填充" of houses" -->
    <ui:decorate template="#{view.viewId}" id="use3">
        <ui:define name="additionalText"> of houses</ui:define>
    </ui:decorate>

</html>

说明

  • <ui:composition>用于封装可复用的代码片段,指定id后可以被精准引用。
  • #{view.viewId}表示当前页面的路径,确保引用的是当前文件内的片段。
  • 两种方式都支持动态传递内容,满足你示例中复用基础文本并添加不同后缀的需求。

内容的提问来源于stack exchange,提问作者Holden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 13:02:49