2013-03-23 55 views
1

我有一个由ResourceBundles管理内容的多语言站点。如何使用JSF导航来使用段落内容插入到网站部分的链接。如何在ResourceBundle内容中使用JSF导航规则

实施例1:所需的HTML输出

<p>Simply <a href="contact.xhtml">contact us</a> to find out more.</p> 

实施例2:简单facelt实现上述

<p>Simply <h:link outcome="contact" value="contact us"/> to find out more.</p> 

期望的结果:相同,但使用ResourceBundle

Facelet

<p> 
    <h:outputText value="${template['paragraph']}"> 
     <f:param> 
      <h:link outcome="contact" value="${template['contactUs']}"/> 
     </f:param> 
    </h:outputText> 
</p> 

资源包

paragraph=Simply {0} to find out more. 
contactUs=contact us 

回答

5

的问题是不完全的JSF导航规则,但你不能使用<f:param>指定JSF组件捆绑参数,更不用说普通的香草HTML孩子。此外,请注意,您不能在<h:outputText>中使用<f:param>,但只能在<h:outputFormat>中使用。

为了达到功能要求,你必须自己写下HTML格式为<f:param value>

<h:outputFormat value="#{template['paragraph']}" escape="false"> 
    <f:param value="&lt;a href='#{request.contextPath}/contact.xhtml'&gt;#{template['contactUs']}&lt;/a&gt;" /> 
</h:outputFormat> 

或者,如果你想利用JSF ViewHandler#getBookmarkableURL()等为<h:link>正在为它的outcome属性,

<h:outputFormat value="#{template['paragraph']}" escape="false"> 
    <f:param value="&lt;a href='#{facesContext.application.viewHandler.getBookmarkableURL(facesContext, '/contact', null, false)}'&gt;#{template['contactUs']}&lt;/a&gt;" /> 
</h:outputFormat> 

既然你不是谁在这个和解决方法跌跌撞撞的第一个很尴尬,JSF实用程序库OmniFaces最近更新了它的<o:param>组件,支持在未指定值时将children编码为参数值。从OmniFaces 1.5开始,您应该可以使用它,如下所示:

<h:outputFormat value="#{template['paragraph']}" escape="false"> 
    <o:param><h:link outcome="contact" value="#{template['contactUs']}" /></o:param> 
</h:outputFormat> 
+1

对于OmniFaces,正是我想要的 – klonq 2013-03-24 10:02:49

+0

不客气。 – BalusC 2013-03-24 10:56:48

+0

Excactly我需要,谢谢BalusC!如果链接的转换器需要查询参数,它甚至会变得更加丑陋。 – djmj 2013-05-20 18:57:12