代码之家  ›  专栏  ›  技术社区  ›  jayjaypg22

枚举上的JSTL foreach

  •  10
  • jayjaypg22  · 技术社区  · 14 年前

    我有一个用枚举类型在java中声明的contant列表,它必须出现在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>
    

    工作正常。 对枚举类型ni foreach循环有限制吗?

    5 回复  |  直到 14 年前
        1
  •  15
  •   Steven Benitez    14 年前

    另一种选择是使用 <c:set/>

    <c:set var="enumValues" value="<%=YourEnum.values()%>"/>
    

    然后就这样重复一遍:

    <c:forEach items="${enumValues}" var="enumValue">
        ...
    </c:forEach>
    

    IDE应该提示您导入 YourEnum 上课。

        2
  •  3
  •   jayjaypg22    14 年前

    实际上,问题是我没有将列表放在jsp的页面范围内。

    <%    pageContext.setAttribute("monEnum", ConstanteADMD.ListTypeAffichage.values()); %>
    
    ...
    <c:forEach var="entry" items="${monEnum}">
        <option>${entry.type}</option>
    </c:forEach>
    

    不需要 getNames 方法

        3
  •  3
  •   YROjha    10 年前

    另一个简单的方法是:

    <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"%>
    
        4
  •  1
  •   Shervin Asgari    14 年前

    您可以创建一个返回 Enum.values() 如果不能直接在EL表达式中使用值。

    getNames() 从枚举内部使用这样的方法,而不是在代码中的其他地方。

    public List<LIST_TYPE_AFFICHAGE> getNames() {
        return new ArrayList<LIST_TYPE_AFFICHAGE>(Arrays.asList(LIST_TYPE_AFFICHAGE.values()));
    }
    
        5
  •  0
  •   highlycaffeinated    14 年前