我正在为JSF创建Facelet组件,供我公司的其他开发人员使用。为了帮助这些,我们设置了示例页面,您可以在其中查看工作示例以及在其他页面中复制,粘贴和修改的源代码。
我需要展示一个如何在属性中使用EL的示例,但是我不能将EL打印成String而没有像
这样的丑陋的解决方法attribute="<h:outputText value="#"/>
<h:outputText value="{"/>
<h:outputText value="myExpression"/>
<h:outputText value="}"/>"
它以这种方式工作,但对我来说看起来很无聊。如何实现我的目标更精简和/或更清洁?
答案 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="<h:outputText value="{myExpression}" />" />