0

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

4

3 回答 3

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;
}

您将使用名称或属性调用该方法。您将获得连接的属性。

于 2012-11-29T09:31:40.010 回答
0

您可以使用以下代码:

StringBuffer allEmployeeName= new StringBuffer();
for(int i=1; i<Employees.length; i++){
   allEmployeeName += Employee[i].Name + "--" 
 }
于 2012-11-29T09:35:53.593 回答
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", "--")}
于 2012-11-29T10:03:52.780 回答