在表达式中使用for循环

时间:2012-11-29 09:29:15

标签: java el

我需要使用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应用程序中使用?

3 个答案:

答案 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", "--")}