如何输出EL作为例子

时间:2013-05-30 10:10:34

标签: jsf el

我正在为JSF创建Facelet组件,供我公司的其他开发人员使用。为了帮助这些,我们设置了示例页面,您可以在其中查看工作示例以及在其他页面中复制,粘贴和修改的源代码。

我需要展示一个如何在属性中使用EL的示例,但是我不能将EL打印成String而没有像

这样的丑陋的解决方法
attribute="<h:outputText value="#"/>
<h:outputText value="{"/>
<h:outputText value="myExpression"/>
<h:outputText value="}"/>"

它以这种方式工作,但对我来说看起来很无聊。如何实现我的目标更精简和/或更清洁?

2 个答案:

答案 0 :(得分:2)

来自Expression Language Specification Version 2.2

  

生成文字值   包括字符序列"${"   或"#{",开发者可以选择   使用复合表达式,如图所示   这里:

${'${'}exprA}
#{'#{'}exprB}
     

结果值将是   字符串${exprA}#{exprB}

     

或者,转义字符   \$\#可用于逃避   否则将被视为一个   EVAL-表达。鉴于   字面表达式:

\${exprA}
\#{exprB}

答案 1 :(得分:0)

您无法直接在属性中输入JSF而无需转义它,当然,在其中使用<>不符合XML标准。此外,您已经看到#{}已呈现。

简单方法:

import static org.apache.commons.lang.StringEscapeUtils.escapeHtml;

public class Bean
{
    public String getValue()
    {
        return escapeHtml("<h:outputText value=\"#{myExpression}\" />");
    }
}

<yourComponent attribute="#{bean.value}" />

艰难的道路:

<yourComponent attribute="&lt;h:outputText value=&quot;{myExpression}&quot; /&gt;" />