我使用新选择的语言环境呈现表单的 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、正文部分和 footer.xhtml?
The @form
影响父级的内容<h:form>
仅有的。使用@all
反而。
<f:ajax listener="#{langListing.changeLocale}" render="@all" />
另请参阅描述render
属性在<f:ajax>标签文档 http://download.oracle.com/javaee/6/javaserverfaces/2.0/docs/pdldocs/facelets/f/ajax.html.
但是,由于更改区域设置无论如何都会影响整个页面,因此您也可以考虑触发同步请求而不是 ajaxical 请求。要实现此目的,请删除<f:ajax>
标签,添加一个onchange="submit()"
到下拉菜单并将代码移到里面changeLocale()
into setLanguage()
方法。也可以看看这个答案 https://stackoverflow.com/questions/4830588/jsf-locale-is-set-per-request-not-for-session/4830669#4830669举一个具体的例子。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)