我想在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。
答案 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)
另一种解决方案是使用函数为您执行此字符串连接。
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}" />