Raj*_*pta 39 jsf facelets el jsf-2
我需要为属性写一个EL表达式,如下所示:
#{cc.attrs.appreciatedByCurrentUser ? (cc.attrs.count +'<br/>'+ (cc.attrs.count-1)) : ((cc.attrs.count+1) +'<br/>'+ cc.attrs.count)}
Run Code Online (Sandbox Code Playgroud)
现在的问题是,这会产生错误,因为字符串无法连接,就像我这样做.那我怎么能纠正这个呢?
我正在使用带有facelets的JSF 2.0.
我正在使用以下内联JavaScript解决问题
<script type="text/javascript">
var count=#{cc.attrs.count};
document.write(#{cc.attrs.appreciatedByCurrentUser} ? (count-1) +'<br/>'+count : count+'<br/>'+ (count+1));
</script>
Run Code Online (Sandbox Code Playgroud)
你能想到这个问题吗?
Sla*_*aSt 69
可以使用该java.lang.String.concat(String)
方法在EL中连接字符串.因此,您的代码可能如下所示:
<h:outputText value="#{cc.attrs.appreciatedByCurrentUser ? (''.concat(cc.attrs.count).concat('<br/>').concat(cc.attrs.count-1)) : (''.concat((cc.attrs.count+1)).concat('<br/>').concat(cc.attrs.count))}" escape="false" />
Run Code Online (Sandbox Code Playgroud)
在这种特殊情况下,我会选择BalusC先生提出的一个选项,因为上面的代码看起来并不优雅.但在某些情况下,了解这种技术可能会有用.
我几乎不建议在这里使用javascript作为解决方法.
Bal*_*usC 39
EL中的字符串连接只能通过在表达式中内联来实现.该+
运营商是专门EL一笔操作.此外,<
并且>
是XML属性中的无效字符,因此您必须将它们转义(并指示<h:outputText>
不要再次转义它们escape="false"
):
<h:outputText value="#{cc.attrs.count}<br/>#{cc.attrs.count-1}" escape="false" rendered="#{cc.attrs.appreciatedByCurrentUser}" />
<h:outputText value="#{cc.attrs.count+1}<br/>#{cc.attrs.count}" escape="false" rendered="#{!cc.attrs.appreciatedByCurrentUser}" />
Run Code Online (Sandbox Code Playgroud)
或者,您也可以使用<c:set>
别名表达式:
<c:set var="appreciated" value="#{cc.attrs.count}<br/>#{cc.attrs.count-1}" />
<c:set var="notAppreciated" value="#{cc.attrs.count+1}<br/>#{cc.attrs.count}" />
<h:outputText value="#{cc.attrs.appreciatedByCurrentUser ? appreciated : notAppreciated}" escape="false" />
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
82870 次 |
最近记录: |