我有下一个方法:
public int countEvents(List<EventTypeEnum> eventTypes)
现在如何从统一的EL中调用此方法?
使用非集合枚举参数可以正常工作但不能使用集合
尝试
${countEvents("ALERT")}
${countEvents(["ALERT"])}
两次崩溃
答案 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
}
还有一个像
这样的计数方法的pojoimport 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实例来调用此方法并希望将其用作静态,则可以按照here或here解释创建自定义jstl方法。
希望这有帮助。