f:setPropertyActionListener标签
前面介绍过,f:param和f:attribute对于从UI向服务器传递信息是很方便的。但这些标签要求手工分别从请求参数或者组件特性中获得信息。
JSF1.2引入的f:setPropertyActionListener标签旨在避免提取操作。使用f:setProperty- ActionListener,JSF实现在backing bean中自动设置属性。下面是将它应用到国旗例子的代码:
- <h:commandLink immediate="true" action="#{localeChanger.changeLocale}">
- <f:setPropertyActionListener target="#{localeChanger.languageCode}"
- value="de"/>
- <h:graphicImage library= "images" name="de_flag.gif" style="border: 0px"/>
- </h:commandLink>
- <h:commandLink immediate="true" action="#{localeChanger.changeLocale}">
- <f:setPropertyActionListener target="#{localeChanger.languageCode}"
- value="en"/>
- <h:graphicImage library= “images” name="en_flag.gif" style="border: 0px"/>
- </h:commandLink>
在上面的JSP代码中,我们告诉JSF实现使用de或en来设置localeChanger bean的languageCode属性。下面是localeChanger bean的相应实现:
- public class LocaleChanger {
- private String languageCode;
- public String changeLocale() {
- FacesContext context = FacesContext.getCurrentInstance();
- context.getViewRoot().setLocale(new Locale(languageCode));
- return null;
- }
- public void setLanguageCode(String newValue) {
- languageCode = newValue;
- }
- }
对于LocaleChanger的实现,我们提供了由JSF实现设置的languageCode只写属性。
在本例的上下文中,方法参数表面上是设置localeChanger bean的languageCode属性的最佳选择。它们易于实现和理解。f:setPropertyActionListener标签在JSF 2.0应用程序中将极少使用。但在其他上下文环境中,f:param和f:attribute也有它们自己的用武之地,可用来设置请求参数或组件特性。