我需要使用Java EL连接一个字符串列表。请注意,这不是在JSP/Web context中,而是在独立的Java客户端(使用juel-2.2.4.jar)中。表达式的形式如下:
${for(int i=1; i<Employees.length; i++){Employee[i].Name + "--" }}我已经有了一个能够理解Employee对象的自定义ELResolver。我期望的输出是一个String,其中包含所有员工的姓名,中间用分隔符分隔。
在独立的Java EL应用程序中,这是可能的吗?
发布于 2012-11-29 18:03:53
你可能需要创建一个辅助函数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", "--")}发布于 2012-11-29 17:31:40
String allName="";
for(int i=1; i<Employees.length; i++){
allName+=Employee[i].Name + "--"
}最后,allName包含连接的名称。因为您是从i=1开始的,所以请确保没有遗漏第一个员工的名字;
你在评论中提出的问题,你不能直接写一些符合你的requirement.Although的东西,你可以这样做;
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;
}您将使用名称调用该方法,否则property.You将获得连接的属性。
发布于 2012-11-29 17:35:54
您可以使用以下代码:
StringBuffer allEmployeeName= new StringBuffer();
for(int i=1; i<Employees.length; i++){
allEmployeeName += Employee[i].Name + "--"
}https://stackoverflow.com/questions/13622591
复制相似问题