【问题标题】:Passing a enum value as a tag attribute in JSP在 JSP 中将枚举值作为标记属性传递
【发布时间】:2011-11-22 08:01:23
【问题描述】:

我有一个自定义 JSP 标记,它使用一个枚举参数。这种方法是使用需要此枚举的其他类的结果。关键是我不知道如何在 EL 中分配枚举值:

<mytaglib:mytag enumParam="${now what do I type here?}" />

到目前为止,我发现的唯一解决方法是将 enumParam 设为 Integer 并将其转换为所需的值:

<mytaglib:mytag enumParam="3" />

我相信一定有更好的方法来做到这一点。请帮忙。

【问题讨论】:

    标签: jsp enums taglib


    【解决方案1】:

    EL 允许使用枚举!

    使用右值或左值表达式设置标签属性值的三种方法:
    [..]

    只有文字:

    这个表达式称为文字表达式。在这种情况下,属性的 String 值被强制转换为属性的预期类型。文字值表达式具有特殊的语法规则。有关详细信息,请参阅文字表达式。当标签属性具有枚举类型时,该属性使用的表达式必须是文字表达式。例如,标签属性可以使用表达式“hearts”来表示 Suit.hearts。文字被强制转换为 Suit 并且属性获取值 Suit.hearts。

    http://download.oracle.com/javaee/5/tutorial/doc/bnahq.html

    枚举:

    public Enum Color{ 
       RED, BLUE, GREEN 
    }
    

    JSP/标签文件

    <mytaglib:mytag enumParam="${'RED'}" />
    

    使用 Tomcat 7.0.22 和 Jetty 6.1.26 测试。

    【讨论】:

      【解决方案2】:

      EL 不支持访问枚举。您应该考虑使用字符串。

      示例:

      public Enum Color{ 
         READ, BLUE, GREEN 
      }
      

      您可以将字符串传递给您的自定义标签,如下所示:

      <mytaglib:mytag enumParam="RED" />
      OR
      <mytaglib:mytag enumParam="${obj.color}" />
      

      在您的自定义标签中,您会得到这样的枚举值:

      Color.valueOf("RED");
      

      【讨论】:

      • 在 devpg 的评论中显示支持枚举。而且我还可以确认他的解决方案有效。
      • 同意彼得。这是不正确的。在您的示例中,enumParam="${'BLUE'}" 可以正常工作。
      猜你喜欢
      • 2013-01-30
      • 2015-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-30
      • 2021-11-27
      相关资源
      最近更新 更多