统一表达式语言,方法调用列表参数

时间:2014-05-05 09:35:49

标签: java collections el

我有下一个方法:

public int countEvents(List<EventTypeEnum> eventTypes)

现在如何从统一的EL中调用此方法?

使用非集合枚举参数可以正常工作但不能使用集合

尝试

${countEvents("ALERT")}
${countEvents(["ALERT"])}

两次崩溃

2 个答案:

答案 0 :(得分:1)

如果值已修复,您可以这样做:

public int countEvents(List<EventTypeEnum> eventTypes) { ... }
public int countAlerts() { 
    return countEvents(Arrays.asList(EventTypeEnum.ALERT)); 
}

${countAlerts()}

这通常是最简单,最清晰的解决方案。

答案 1 :(得分:1)

在jstl中可以将枚举视为字符串。但是没有直接的方法可以在jstl中创建列表。你需要在范围内有一个evenTypes列表,比如说${eventTypes},这是一个List<EventTypeEnum>然后你就可以直接在你的bean中使用像${bean.countEvents(eventTypes)}这样的方法。

但是从您的代码中我假设你需要动态创建它。在这种情况下,您将不得不依赖标准的jsp。假设你有一个枚举

public enum EventTypeEnum {
    ALERT, ONCLICK, ONBLUR
}

还有一个像

这样的计数方法的pojo
import java.util.List;

public class CountBean {

    public int countEvents(List<EventTypeEnum> eventTypes){
        return eventTypes.size();
    }

}

因此,如果您在范围内有CountBean的实例,请说${myBean}然后在您的jsp中,您可以这样做

<jsp:useBean id="events" class="java.util.ArrayList"> 
  <% 
    events.add("ALERT");
    events.add("ONCLICK");
  %>
</jsp:useBean>

Length : <c:out value="${myBean.countEvents(events)}"/>

这样可以正常工作。如果您不想使用<jsp:useBean>方法,可以使用MicroNova YUZU标记。它是一个基于开源EL的JSP标记库,旨在增强JSTL。更多细节可以在http://www.micronova.com/yuzu.jsp找到。

如果您不想创建bean实例来调用此方法并希望将其用作静态,则可以按照herehere解释创建自定义jstl方法。

希望这有帮助。