在 JSF 包括之间传递和使用参数
Passing and using parameters between JSF includes
我一直在努力理解 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>
认识到书中的示例可能是为了说明一点而设计的示例,是否存在其他语法适用的用例?
我不知道或拥有这本书,所以我无法那样调查他们想要说明的内容,但我可以通过查看 full 示例来推断出你发布,不只是关于 centerAction
的部分。
如果你看
<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>
你会看到2参数被传递,templatesBeanName
和 contentPropertyName
在
<ui:composition>
<h:outputText value="#{templatesBeanName[contentPropertyName]}"/>
<h:form>
<h:commandButton value="Center Button" action="#{templatesBeanName['centerAction']()}"/>
</h:form>
</ui:composition>
从中您刚刚指向带有 action="#{templatesBeanName['centerAction']()}"
的行,一个在 suqare 括号中具有静态值的动态 bean 通过将 ()
作为后缀添加到方法中,您会看到另一个它上面的代码行
<h:outputText value="#{templatesBeanName[contentPropertyName]}"/>
这里有效的做法是让动态 bean AND 使用动态 属性 名称。
所以我的结论是,通过这个例子,他们试图说明的是,您能够传递动态 bean,并且在该 bean 上使用静态或动态方法和属性(静态属性和动态方法不在示例中)
我一直在努力理解 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>
认识到书中的示例可能是为了说明一点而设计的示例,是否存在其他语法适用的用例?
我不知道或拥有这本书,所以我无法那样调查他们想要说明的内容,但我可以通过查看 full 示例来推断出你发布,不只是关于 centerAction
的部分。
如果你看
<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>
你会看到2参数被传递,templatesBeanName
和 contentPropertyName
在
<ui:composition>
<h:outputText value="#{templatesBeanName[contentPropertyName]}"/>
<h:form>
<h:commandButton value="Center Button" action="#{templatesBeanName['centerAction']()}"/>
</h:form>
</ui:composition>
从中您刚刚指向带有 action="#{templatesBeanName['centerAction']()}"
的行,一个在 suqare 括号中具有静态值的动态 bean 通过将 ()
作为后缀添加到方法中,您会看到另一个它上面的代码行
<h:outputText value="#{templatesBeanName[contentPropertyName]}"/>
这里有效的做法是让动态 bean AND 使用动态 属性 名称。
所以我的结论是,通过这个例子,他们试图说明的是,您能够传递动态 bean,并且在该 bean 上使用静态或动态方法和属性(静态属性和动态方法不在示例中)