klo*_*onq 1 jsf internationalization
我有一个多语言网站,内容由ResourceBundles管理.如何使用JSF导航使用段落内容插入到网站部分的链接.
示例1:所需的HTML输出
<p>Simply <a href="contact.xhtml">contact us</a> to find out more.</p>
Run Code Online (Sandbox Code Playgroud)
例2:简单的facelt实现上述
<p>Simply <h:link outcome="contact" value="contact us"/> to find out more.</p>
Run Code Online (Sandbox Code Playgroud)
期望的结果:与ResourceBundle相同但是相同
的facelet
<p>
<h:outputText value="${template['paragraph']}">
<f:param>
<h:link outcome="contact" value="${template['contactUs']}"/>
</f:param>
</h:outputText>
</p>
Run Code Online (Sandbox Code Playgroud)
资源包
paragraph=Simply {0} to find out more.
contactUs=contact us
Run Code Online (Sandbox Code Playgroud)
问题不完全是JSF导航规则,但您不能用于<f:param>将JSF组件指定为bundle参数,更不用说普通的vanilla HTML子代.另外,请注意,您不能使用<f:param>的<h:outputText>,但只有在<h:outputFormat>.
无论如何,为了达到功能要求,你必须自己写下转义味道的HTML <f:param value>.
<h:outputFormat value="#{template['paragraph']}" escape="false">
<f:param value="<a href='#{request.contextPath}/contact.xhtml'>#{template['contactUs']}</a>" />
</h:outputFormat>
Run Code Online (Sandbox Code Playgroud)
或者,如果你想利用JSF ViewHandler#getBookmarkableURL()等作为<h:link>正在为它的outcome属性,
<h:outputFormat value="#{template['paragraph']}" escape="false">
<f:param value="<a href='#{facesContext.application.viewHandler.getBookmarkableURL(facesContext, '/contact', null, false)}'>#{template['contactUs']}</a>" />
</h:outputFormat>
Run Code Online (Sandbox Code Playgroud)
由于您不是第一个偶然发现这一点并且变通方法很难处理的人,因此JSF实用程序库OmniFaces最近更新了其<o:param>组件,支持在没有指定值时将子代码编码为param值.从OmniFaces 1.5开始,您应该可以按如下方式使用它:
<h:outputFormat value="#{template['paragraph']}" escape="false">
<o:param><h:link outcome="contact" value="#{template['contactUs']}" /></o:param>
</h:outputFormat>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
383 次 |
| 最近记录: |