Struts 2 迭代枚举
Posted
技术标签:
【中文标题】Struts 2 迭代枚举【英文标题】:Struts 2 iterate enum 【发布时间】:2011-10-06 05:17:17 【问题描述】:是否可以在 Struts 2 中使用标签 <s:iterator>
迭代枚举?
现在我正在使用字符串列表来做,但是可以直接使用枚举吗?
提前致谢。
【问题讨论】:
【参考方案1】:是的。这有点难看,答案是启用静态方法访问,对 OGNL 表达式使用内部类语法(使用“$”),两者结合使用将让您获得 Steven 已经提到的 values 方法。这是一个例子:
示例操作:
package com.action.test;
import com.opensymphony.xwork2.ActionSupport;
public class EnumTest extends ActionSupport
enum NumbersONE, TWO, THREE;
JSP 示例:
<%@taglib prefix="s" uri="/struts-tags"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<body>
<h1>Enum Test</h1>
//NOTE THE USE OF THE $ character to access the inner class on the following two lines.
length: <s:property value="@com.action.test.EnumTest$Numbers@values().length"/><br/>
<s:iterator value="@com.action.test.EnumTest$Numbers@values()">
<s:property/><br/>
</s:iterator>
</body>
</html>
输出:
枚举测试
长度:3 一个 两个 三
注意:确保启用静态方法访问。执行此操作的简单方法是在 struts.xml 中的
<struts>
标记之后添加以下内容。
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
【讨论】:
【参考方案2】:有点。您不能直接迭代枚举,因为它不是值的集合(枚举引用仅代表枚举常量之一)。但是,您可以迭代枚举的 values()
方法,它是一个数组,或者您可以在您的操作中创建一个 EnumSet
并对其进行迭代。
示例枚举
package example;
public enum SomeEnum
ONE, TWO, THREE;
/* I don't recall if/how you can refer to non-getters in OGNL. */
public String getName()
return name();
示例 JSP
<s:iterator value="@example.SomeEnum@values()">
<s:property value="name"/>
</s:iterator>
【讨论】:
+1 对于第一个正确的解决方案,我通常将枚举放在我的类中,因此需要访问内部类。如果 OP 将他的枚举创建为常规类(我的意思不是内部类),那么这绝对是正确的解决方案。 PS:要访问非 getter,只需在末尾添加 ()。 我是这么认为的,但是添加()
对我不起作用。哦,好吧。以上是关于Struts 2 迭代枚举的主要内容,如果未能解决你的问题,请参考以下文章
如何在struts 2中将迭代器索引值传递给Javascript?