使用新选择的语言环境呈现表单的我的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?
答案 0 :(得分:3)
@form
仅影响父<h:form>
的内容。请改用@all
。
<f:ajax listener="#{langListing.changeLocale}" render="@all" />
另请参阅<f:ajax>
tag documentation中render
属性的说明。
但是,由于更改区域设置会影响整个页面,因此您还可以考虑触发同步请求而不是ajaxical请求。要实现此目的,请移除<f:ajax>
代码,在下拉列表中添加onchange="submit()"
,然后将changeLocale()
内的代码移至setLanguage()
方法。另请参阅this answer以获取具体示例。