如何在EL表达式的文本中使用不同的backing bean属性?

时间:2012-11-08 00:55:08

标签: java jsf-2 el

我正在尝试为登录的用户类型显示不同的消息但是正在解析异常

<ui:define name="header">
        <ui:param name="userParam" value="#{bean.user.firstName} - #{bean.user.lastName}" />    
        <p:panel id="headerPanel"
            header="#{bean.adminUser ? 'Welcome Power User' userParam : bean.normalUser ? 'Welcome User' userParam :'Welcome to sytem'}"/>
    </ui:define>

这是例外

Caused by: org.apache.el.parser.ParseException: Encountered "?" at line 1, column 21.
Was expecting one of:
    "}" ...
    "." ...
    "[" ...
    ">" ...
    "gt" ...
    "<" ...
    "lt" ...
    ">=" ...
    "ge" ...
    "<=" ...
    "le" ...
    "==" ...
    "eq" ...
    "!=" ...
    "ne" ...
    "&&" ...
    "and" ...
    "||" ...
    "or" ...
    "*" ...
    "+" ...
    "-" ...
    "/" ...
    "div" ...
    "%" ...
    "mod" ...

2 个答案:

答案 0 :(得分:2)

从你的代码:

#{bean.adminUser ? 'Welcome Power User' userParam : bean.normalUser ? 'Welcome User' userParam :'Welcome to sytem'}

你不能以这种方式连接EL中的字符串。

如果您使用的是EL 2.2,则可以使用字符串的concat()方法。

#{bean.adminUser ? 'Welcome Power User '.concat(userParam) : bean.normalUser ? 'Welcome User '.concat(userParam) : 'Welcome to sytem'}

或者,如果您仍然使用EL 2.1,则应事先由另一个<ui:param>(或<c:set>)准备完整的字符串:

<ui:param name="welcomePowerUser" value="Welcome Power User #{userParam}" />
<ui:param name="welcomeUser" value="Welcome User #{userParam}" />
...
#{bean.adminUser ? welcomePowerUser : bean.normalUser ? welcomeUser : 'Welcome to sytem'}

答案 1 :(得分:1)

使用两个表达式:

#{bean.adminUser ? 'Welcome Power User' : 'Welcome User'}#{userParam}