使用ui:composition、ui:insert和ui:include时需逐层传递ui:param吗
结论
你可以直接在template2.xhtml中访问a1参数,不需要在<ui:include>标签中重复通过<ui:param>传递。
原理说明
Facelets(JSF默认视图技术)中,<ui:param>定义的参数会存入当前Facelet的上下文,作用域覆盖整个当前渲染链下的所有关联页面:
- 你在main.xhtml的
<ui:composition>下声明的a1参数,首先会传递给引用的模板template1.xhtml - template1.xhtml中通过
<ui:include>引入的template2.xhtml,默认会继承当前Facelet上下文的所有参数,因此可以直接读取a1的值
补充说明
只有在以下场景才需要在<ui:include>下额外声明<ui:param>:
- 需要覆盖上层传递的同名参数值
- 需要给被包含页面传递仅作用于该包含场景的专属参数
- 部分老旧的非标准Facelets实现存在参数继承缺陷时,可手动传递做兼容验证
内容的提问来源于stack exchange,提问作者Mohammad Ashfaq
相关产品推荐
相关产品推荐

