我们正在使用JAXB生成的类,包括Enum。 JAXB为我们生成了一个Enum,看起来像这样。请注意,getter确实不有" get"在其方法名称中。
public enum ActionType {
A("A"),
B("B"),
C("C");
private final String value;
ActionType(String v)
{
value = v;
}
public String value() {
return value;
}
public ActionType fromValue(String v)
{
for (ActionType c: ActionType.values())
{
if (c.value.equals("v")) {
return c;
}
}
throw new IllegalArgumentException(v);
}
}
我在JSTL表达式中引用此问题时遇到了问题。这不起作用:
<c:forEach var="item" items="${action_types}">
<form:radiobutton path="actionType" value="${item.value}"/>${item.value}
</c:forEach>
错误:
财产&#39;价值&#39;在类型上找不到.... ActionType
它正在寻找我们自动生成的 getValue()而不是 value()。任何解决方法?
答案 0 :(得分:2)
如果您使用EL 2.2+,它引入了使用括号语法调用直接方法的新功能,如#{bean.method()}
,那么只需使用该功能。
<form:radiobutton ... value="${item.value()}" />
EL 2.2是随Servlet 3.0(2009年12月)推出的。 Tomcat 7是第一个支持它的人。因此,如果您使用Tomcat 7+并且您的webapp web.xml
与Servlet 3.0+兼容,那么它应该可以正常工作。
答案 1 :(得分:1)
如果您使用旧的EL版本,另一个解决方案是在与枚举相同的包中创建自定义- @forums.each do |forum|
tr.dotted
td.yach
= image_tag('forumico.png')
u = link_to forum.name, forum_path(forum)
br
p = forum.desc
td = forum.topics.count
td = forum.topics.map(&:posts).flatten.count
类(在这种情况下为BeanInfo
),并使用正确的ActionTypeBeanInfo
PropertyDescriptor
。
value