【发布时间】:2018-06-07 19:50:25
【问题描述】:
我一直在尝试理解 JSF 模板和 include 属性以及在组件之间传递参数。在 Anghel Leonard 的 Mastering JavaServer Faces 2.2 中,我遇到了以下传递参数的示例,但我并不完全理解。
鉴于此 bean:
@Named
@ViewScoped
public class TemplatesBean implements Serializable {
private String msgTopDefault="";
private String msgBottomDefault="";
private String msgCenterDefault="No center content ... press the below button!";
public void centerAction(){
this.msgCenterDefault="This is default content";
}
// Getters and setters
}
参数被传递给contentDefault.xhtml:
<ui:insert name="content">
<ui:include src="/template/default/contentDefault.xhtml">
<ui:param name="templatesBeanName" value="#{templatesBean}"/>
<ui:param name="contentPropertyName" value="msgCenterDefault"/>
</ui:include>
</ui:insert>
那么,在contentDefault.xhtml内,参数使用如下:
<ui:composition>
<h:outputText value="#{templatesBeanName[contentPropertyName]}"/>
<h:form>
<h:commandButton value="Center Button" action="#{templatesBeanName['centerAction']()}"/>
</h:form>
</ui:composition>
我以前从未使用过方括号语法,但是如果传入了对templatesBean 的引用,为什么不直接使用它来访问属性或调用操作方法呢?例如,以下代码也适用于我,而且看起来更简单:
<h:form>
<h:commandButton value="Center Button" action="#{templatesBeanName.centerAction()}"/>
</h:form>
认识到书中的例子可能是一个人为的例子来说明一个观点,是否存在适合其他语法的用例?
【问题讨论】: