【问题标题】:Struts 2 iterate enumStruts 2 迭代枚举
【发布时间】:2011-10-06 05:17:17
【问题描述】:

是否可以在 Struts 2 中使用标签 <s:iterator> 迭代枚举? 现在我正在使用字符串列表来做,但是可以直接使用枚举吗?

提前致谢。

【问题讨论】:

    标签: java jsp enums struts2


    【解决方案1】:

    是的。这有点难看,答案是启用静态方法访问,对 OGNL 表达式使用内部类语法(使用“$”),两者结合使用将让您获得 Steven 已经提到的 values 方法。这是一个例子:

    示例操作

    package com.action.test;
    import com.opensymphony.xwork2.ActionSupport;
    
    public class EnumTest extends ActionSupport{
        enum Numbers{ONE, 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 中的 &lt;struts&gt; 标记之后添加以下内容。
    <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,只需在末尾添加 ()。
      • 我是这么认为的,但是添加 () 对我不起作用。哦,好吧。
      猜你喜欢
      • 2011-01-03
      • 2011-02-07
      • 1970-01-01
      • 2011-01-20
      • 2014-10-27
      • 2012-06-08
      • 2013-05-11
      • 2017-02-03
      • 2018-06-02
      相关资源
      最近更新 更多