EL中字符串的连接

时间:2014-01-15 15:26:51

标签: jsf el

我想在JSF的下拉列表中显示名称(当前用户)。这里的名称是一个动态变量,通过一些pojo类填充。我现有的代码是

<f:selectItem itemLabel="#{accessManager.salesManager.displayName} #{' ('.concat(i.m['current user']).concat(') ')}" itemValue="#{accessManager.salesManager.oid}" />

accessManager.salesManager.displayName在UI上填充名称。

#{' ('.concat(i.m['current user']).concat(') ')}" here I am trying to hard code (current user).

但这是抛出异常。

任何人都可以帮助我吗?这听起来是一个非常简单的查询,但我不习惯EL。

3 个答案:

答案 0 :(得分:0)

根据您的示例,最简单的方法是在托管bean中提供一个额外的函数,用于评估当前用户是否是当前用户。稍后,您将使用三元运算符评估该函数,该运算符将决定是否显示捆绑(已转换)的值。

@ViewScoped
public class ChoiceBean{

    public List<SalesManager> getSalesManagers(){
        return salesManagers;
    }

    //Checks if your current choice is the current manager(EL 2.2 required to pass the parameter)
    public boolean checkIfCurrent(SalesManager manager){
        if (manager.getName().equals("Bob")) return true;
        return false;
    }

}
<f:selectItem 
    itemLabel="#{manager.name} #{choiceBean.checkIfCurrent(manager) ? i.m['current user'] : ''}" itemValue="#{salesManager.oid}" />

另见:

答案 1 :(得分:0)

另一种解决方案是使用函数为您执行此字符串连接。

  • 您将JSTL函数库与fn:join一起使用(请参阅enter link description here)或
  • implement your own static method in EL,然后使用那个。该方法本身(令人惊讶地)看起来像

    public static String concat(String string1, String string2) {
       return string1.concat(string2);
    }
    

    和JSF中的调用,嵌套为#{fn:concat('(',fn:concat(i.m['current user'],')'))}

但是,出于好奇,为什么不想将括号添加到属性文件中,因此ressource-value包含(current user)而不是current user

希望它有所帮助...

答案 2 :(得分:0)

  

所以问题是如何在#{i.m ['当前用户'])} 之前和之后连续'('&amp;')'

不要这么做。把这些括号放在EL表达式之外。

<f:selectItem itemLabel="#{accessManager.salesManager.displayName} (#{i.m['current user']})" itemValue="#{accessManager.salesManager.oid}" />