我需要使用Java EL
连接字符串列表。请注意,这不在JSP/Web context
中,而是在独立的Java客户端中(使用juel-2.2.4.jar
)。
表达式的格式为:
${for(int i=1; i<Employees.length; i++){Employee[i].Name + "--" }}
我已经有了一个可以理解ELResolver
个对象的自定义Employee
。
我期望的输出是String
,其中包含所有员工的名字,中间有一个分隔符。
这是否可以在独立的Java EL
应用程序中使用?
答案 0 :(得分:0)
String allName="";
for(int i=1; i<Employees.length; i++){
allName+=Employee[i].Name + "--"
}
最后allName
包含连接的名称。当您从i = 1开始时,请确保您没有错过第一个员工的姓名;
你在评论中提到的,你不能直接写出符合你要求的东西。虽然你可以做类似下面的事情;
public String getConcatenatedString(String property){
String allName="";
for(int i=1; i<Employees.length; i++){
if(property.equals("name"))
allName+=Employee[i].Name + "--";
else if(property.equals("designation"))
allName+=Employee[i].designation + "--";
}
return allName;
}
您将使用name或property调用该方法。您将获得连接属性。
答案 1 :(得分:0)
您可以使用以下代码:
StringBuffer allEmployeeName= new StringBuffer();
for(int i=1; i<Employees.length; i++){
allEmployeeName += Employee[i].Name + "--"
}
答案 2 :(得分:0)
你可能需要做一个辅助函数,afaik,java无法用开箱即用的表达式来处理它。
${Employee.joinEmployeesByName(Employees, "--")}
Employee
类中的代码:
public static String joinEmployeesByName( Employee[] arr, String separator ) {
//implement
}
这是使用反射的动态示例:
public static String getFieldByName(Employee obj, String fieldName) {
String ret = null;
Class<?> c = obj.getClass();
try {
Field field = c.getDeclaredField(fieldName);
ret = field.get(obj).toString();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return ret;
}
public static String joinEmployeesByField(Employee[] arr, String fieldName, String separator) {
if(arr.length < 1) {
return "";
}
StringBuilder ret = new StringBuilder();
ret.append(getFieldByName(arr[0], fieldName));
for( int i = 1; i < arr.length; ++i ) {
ret.append( separator );
ret.append( getFieldByName( arr[i], fieldName) );
}
return ret.toString();
}
用法是:
${Employee.joinEmployeesByField(Employees, "Name", "--")}
${Employee.joinEmployeesByField(Employees, "Designation", "--")}