创建自己的标记时嵌套EL表达式

时间:2013-07-09 09:15:35

标签: java jsf jsf-2 taglib

我正在使用JSF 2.0并创建自己的标记。我想要的结果是一个标签,我可以像这样使用:

<mytaglib:label attr="test" />

会像这样呈现<h:outputLabel />

<h:outputLabel id="test" value="#{textBean.label['test']}" />

TextBean具有属性label(类型为Map<String, String>),它为每个键提供了一个文本。

我的label.xhtml看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets">
<h:body>
    <ui:composition>
        <h:outputLabel for="#{attr}" value="#{textBean.label['#{attr}']}:" 
    </ui:composition>
</h:body>
</html>

#{attr}内的拳击#{textBean.label['#{attr}']}似乎不起作用。有没有办法让这个工作,或者我可以做出哪些解决方法让它工作?

1 个答案:

答案 0 :(得分:1)

您不应使用嵌套的EL表达式。

尝试这样的事情:

value="#{textBean.label[attr]}"

但我不完全确定这是否是完全正确的语法,因为我不知道来自label的{​​{1}}代表什么。如果您需要更多信息,请提供textBean的样本。