JSF 2 - Ajax - 表单未完全呈现

时间:2011-02-17 17:36:17

标签: ajax jsf jsf-2

使用新选择的语言环境呈现表单的我的Ajax代码是:

<h:selectOneMenu id="selectLang" immediate="true" value="#{langListing.language}">
   <f:ajax listener="#{langListing.changeLocale}" render="@form" />
   <f:selectItems value="#{langListing.languages}" />
</h:selectOneMenu>

但是,由于上面的代码在一个名为header.xhtml的头文件中,当我在英语和法语之间切换语言环境时,上面的代码只呈现header.xhtml的内容。我的index.xhtml结构如下:

header.xhtml
menu.xhtml
body content with an id of "contentSection"
footer.xhtml

如何在渲染header.xhtml的同时渲染menu.xhtml,body部分和footer.xhtml?

1 个答案:

答案 0 :(得分:3)

@form仅影响父<h:form>的内容。请改用@all

<f:ajax listener="#{langListing.changeLocale}" render="@all" />

另请参阅<f:ajax> tag documentationrender属性的说明。

但是,由于更改区域设置会影响整个页面,因此您还可以考虑触发同步请求而不是ajaxical请求。要实现此目的,请移除<f:ajax>代码,在下拉列表中添加onchange="submit()",然后将changeLocale()内的代码移至setLanguage()方法。另请参阅this answer以获取具体示例。