2011-11-22 87 views
10

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

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

,我发现迄今是使enumParam一个整数,将其转换为所需的值唯一的解决方法:

<mytaglib:mytag enumParam="3" /> 

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

回答

12

EL允许使用Enums!

有三种方式来设置一个标记属性值使用任一个rvalue或左值表达式:
[..]

由于只有文本:

<一些:标记值=“sometext “/ >

该表达式被称为文字表达式。在这种情况下,属性的String值被强制为属性的预期类型。文字值表达式具有特殊的语法规则。有关更多信息,请参见文字表达式。当标签属性具有枚举类型时,该属性使用的表达式必须是文字表达式。例如,标签属性可以使用表达式“hearts”来表示Suit.hearts。字面被强制为适合,并且属性获得值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以及码头6.1.26。

+0

也测试过在Tomcat 6.0上工作。 – Bass

-1

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

例子:

public Enum Color{ 
    READ, BLUE, GREEN 
} 

可以传递字符串添加到自定义标签象下面这样:

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

在您的自定义标签你得到的枚举值是这样的:

Color.valueOf("RED"); 
+2

在devpg的评论中显示支持枚举。而且我也可以确认他的解决方案有效。 –

+0

同意彼得。这是不正确的。在你的例子中,'enumParam =“$ {'BLUE'}”'会工作得很好。 – dgrundel