我在java中使用枚举类型声明了一个必须列表,它必须出现在jsp中。 Java枚举声明:
public class ConstanteADMD {
public enum LIST_TYPE_AFFICHAGE {
QSDF("qsmldfkj"), POUR("azeproui");
private final String name;
@Override
public String toString() {
return name;
}
private LIST_TYPE_AFFICHAGE(String name) {
this.name = name;
}
public static List<String> getNames() {
List<String> list = new ArrayList<String>();
for (LIST_TYPE_AFFICHAGE test : LIST_TYPE_AFFICHAGE.values()) {
list.add(test.toString());
}
return list;
}
}
}
<select name="typeAffichage" id="typeAffichage">
<c:forEach var="type" items="${netcsss.outils.ConstanteADMD.LIST_TYPE_AFFICHAGE.names}">
<option value="${type}">${type}</option>
</c:forEach>
</select>
其中:
<select name="typeAffichage" id="typeAffichage">
<c:choose>
<c:when test="${catDecla ne null}">
<option
value="<%=catDecla.getCatDecla().getSTypeAffichage()%>"
selected="selected"><%=catDecla.getCatDecla().getSTypeAffichage()%></option>
</c:when>
</c:choose>
<%List<String> list = ConstanteADMD.LIST_TYPE_AFFICHAGE.getNames();
for(String test : list) {
%>
<option value="<%=test%>"><%=test%></option>
<%}%>
</select>
工作正常。 枚举类型是否存在限制?#foreach循环?
答案 0 :(得分:15)
另一种选择是使用<c:set/>
标记,例如:
<c:set var="enumValues" value="<%=YourEnum.values()%>"/>
然后只是迭代它:
<c:forEach items="${enumValues}" var="enumValue">
...
</c:forEach>
您的IDE应该提示您导入YourEnum
类。
答案 1 :(得分:3)
值方法工作正常,我的错误。 确实问题是我没有把我的列表放在我的jsp的页面范围内。
<% pageContext.setAttribute("monEnum", ConstanteADMD.ListTypeAffichage.values()); %>
...
<c:forEach var="entry" items="${monEnum}">
<option>${entry.type}</option>
</c:forEach>
不需要getNames
方法
答案 2 :(得分:3)
另一种简单的方法可以是:
<c:forEach items="<%=LIST_TYPE_AFFICHAGE.values()%>" var="entry">
<option>${entry.name }</option>
</c:forEach>
您需要导入以下内容:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@page import="packagename.LIST_TYPE_AFFICHAGE"%>
答案 3 :(得分:1)
如果不能直接在EL表达式中使用值,则可以创建返回Enum.values()
的方法。
从您的枚举中移除getNames()
,并使用类似的方法代替代码中的其他位置。
public List<LIST_TYPE_AFFICHAGE> getNames() {
return new ArrayList<LIST_TYPE_AFFICHAGE>(Arrays.asList(LIST_TYPE_AFFICHAGE.values()));
}
答案 4 :(得分:0)
您在c:forEach的items属性中使用的EL正在尝试在枚举类型上调用静态方法。我相信EL只支持对实例方法的调用。