0

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

我需要展示一个如何在属性中使用 EL 的示例,但是如果没有像这样的丑陋解决方法,我无法将 EL 打印为字符串

attribute="<h:outputText value="#"/>
<h:outputText value="{"/>
<h:outputText value="myExpression"/>
<h:outputText value="}"/>"

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

4

2 回答 2

2

表达式语言规范版本 2.2

要生成包含字符序列"${" or"#{"的文字值,开发人员可以选择使用复合表达式,如下所示:

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

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

或者,转义字符 \$\#可用于转义原本会被视为 eval 表达式的内容。给定文字表达式:

\${exprA}
\#{exprB}
于 2013-05-30T10:24:05.293 回答
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;" />
于 2013-05-30T10:16:46.250 回答