没有get前缀的getter的EL表达式

时间:2015-10-29 16:05:55

标签: jsp spring-mvc el

我们正在使用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()。任何解决方法?

2 个答案:

答案 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