Jsf EL中字符串的串联

Jsf EL中字符串的串联,jsf,el,Jsf,El,我想在JSF中的下拉列表中显示名称(当前用户)。这里的name是一个动态变量,它通过一些pojo类填充。我现在的代码是 <f:selectItem itemLabel="#{accessManager.salesManager.displayName} #{' ('.concat(i.m['current user']).concat(') ')}" itemValue="#{accessManager.salesManager.oid}" /> 但这是抛出例外 有人能帮我吗?这听

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

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


有人能帮我吗?这听起来是一个非常简单的查询,但我不习惯EL。

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

@ViewScoped
公共类菜豆{
公共列表getSalesManager(){
返回销售经理;
}
//检查您当前选择的是否为当前管理器(传递参数需要EL 2.2)
公共布尔值checkIfCurrent(SalesManager){
if(manager.getName().equals(“Bob”))返回true;
返回false;
}
}

另请参见:


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

  • 您可以将JSTL函数库与
    fn:join
    (请参阅)或
  • ,然后用那个。该方法本身(令人惊讶地)看起来像

    public static String concat(String string1, String string2) {
       return string1.concat(string2);
    }
    
    JSF中的调用,嵌套方式类似于
    {fn:concat('(',fn:concat(i.m['current user'],')))}

但是,出于好奇,为什么不将括号添加到属性文件中,以便ressource值保存
(当前用户)
,而不是
当前用户

希望对你有帮助

所以问题是我如何在#{I.m['current user']}之前和之后连接“('&')”

别这么辛苦。把那些括号放在EL表达式之外

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


您到底想显示什么?如果accessManager.salesManager.displayName的计算结果为“Bob”,那么我想在下拉列表中显示Bob(当前用户)。需要注意的是,“当前用户”是特定于语言的。不同语言的“当前用户”值保存在属性文件中。很抱歉,我想我无法正确回答问题。Xtreme提供的上述代码将显示当前用户。我想显示Bob(当前用户)。所以问题是如何在#{I.m['current user']}之前和之后连接“('&')”。不,在属性文件中,它只是当前用户。在.xhtml中,我们将向当前用户添加“(”和“)”。我知道。。。所以我想,你不能自己更改ressource捆绑包,而只引入第二个“括号”版本?如果是这样,请使用上面解释的静态连接方法并通过链接。它对我们很有用,而且没有第一次查看时看起来那么痛苦。我可以将资源包更改为包含(当前用户)=其他语言的一些文本。从@user3198773的说法来看,我理解(当前用户)文本应该只在当前selectItem与当前(记录的???)用户匹配时出现。所以
(#{i.m['current user']})
应该有条件地呈现(正如我推断的那样)。@Xtreme:他在哪里说的?他最初的尝试也没有以任何方式表明这一点。看看我在问题下方评论中的讨论。也许我误解了,但如果所有这些都用(当前用户)标记,那会很奇怪,不是吗?不管怎么说,这个问题本身需要洗脸。@Xtreme:嗯,功能需求毕竟很奇怪。无论如何,上述答案仍然解决了技术问题。
<f:selectItem itemLabel="#{accessManager.salesManager.displayName} (#{i.m['current user']})" itemValue="#{accessManager.salesManager.oid}" />