JSTL foreach 枚举
我有一个使用枚举类型在 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>
其中 as:
<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 循环中的枚举类型是否有限制?
I have a contant list declared in java using enum type, that must appears in a jsp.
Java enum declaration :
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>
where as :
<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>
Works fine.
Is there a limitation on enum types ni foreach loop?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
另一种选择是使用
标记,如下所示:然后按如下方式迭代它:
您的 IDE 应提示您导入
YourEnum
类。Another option is to use a
<c:set/>
tag like such:Then just iterate over it as such:
Your IDE should prompt you to import the
YourEnum
class.另一种简单的方法可以是:
您需要导入这些:
Another simple way can be:
You need to import these:
价值观方法工作正常,我的错误。
事实上,问题是我没有将列表放入 jsp 的页面范围中。
不需要
getNames
方法The values method works fine, my mistake.
Indeed the problem was that I didn't put my list in the page scope of my jsp.
No need of the
getNames
method如果您无法直接在 EL 表达式中使用值,您可以创建一个返回
Enum.values()
的方法。从枚举中删除
getNames()
并在代码中的其他位置使用类似的方法。You can create a method that returns
Enum.values()
if you cannot use values directly in your EL expression.Remove the
getNames()
from inside your Enum and use a method like this instead somewhere else in your code.您在 c:forEach 上的 items 属性中使用的 EL 尝试对您的枚举类型调用静态方法。我相信 EL 仅支持对实例方法的调用。
The EL you are using in the items attribute on c:forEach is trying to call a static method on your enum types. I believe that EL only supports calls on instance methods.