没有 get 前缀的 getter 的 EL 表达式
EL expression for getter without a get prefix
我们正在使用 JAXB 生成的 类,包括一个枚举。 JAXB 为我们生成了一个如下所示的枚举。请注意,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>
错误:
属性 'value' 未找到类型....ActionType
它正在寻找 getValue() 而不是我们自动生成的 value()。有什么解决方法吗?
如果您使用的是 EL 2.2+,它引入了使用括号语法调用直接方法的新功能,如 #{bean.method()}
,那么只需利用该功能即可。
<form:radiobutton ... value="${item.value()}" />
EL 2.2 是随 Servlet 3.0(2009 年 12 月)引入的。 Tomcat7是第一个支持的。因此,如果您使用 Tomcat 7+ 并且您的网络应用程序的 web.xml
与 Servlet 3.0+ 兼容,那么它应该可以正常工作。
如果您使用旧的 EL 版本,另一种解决方案是在与您的枚举相同的包中创建自定义 BeanInfo
class(在本例中为 ActionTypeBeanInfo
)将 PropertyDescriptor
更正为 value
.
public class ActionTypeBeanInfo extends SimpleBeanInfo {
public PropertyDescriptor[] getPropertyDescriptors() {
try {
Method readMethod = ActionType.class.getDeclaredMethod("value", new Class[0]); // not getValue
Method writeMethod = null;
PropertyDescriptor value = new PropertyDescriptor("value", readMethod, writeMethod);
return new PropertyDescriptor[] { value };
} catch (Exception e) {
return null;
}
}
}
我们正在使用 JAXB 生成的 类,包括一个枚举。 JAXB 为我们生成了一个如下所示的枚举。请注意,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>
错误:
属性 'value' 未找到类型....ActionType
它正在寻找 getValue() 而不是我们自动生成的 value()。有什么解决方法吗?
如果您使用的是 EL 2.2+,它引入了使用括号语法调用直接方法的新功能,如 #{bean.method()}
,那么只需利用该功能即可。
<form:radiobutton ... value="${item.value()}" />
EL 2.2 是随 Servlet 3.0(2009 年 12 月)引入的。 Tomcat7是第一个支持的。因此,如果您使用 Tomcat 7+ 并且您的网络应用程序的 web.xml
与 Servlet 3.0+ 兼容,那么它应该可以正常工作。
如果您使用旧的 EL 版本,另一种解决方案是在与您的枚举相同的包中创建自定义 BeanInfo
class(在本例中为 ActionTypeBeanInfo
)将 PropertyDescriptor
更正为 value
.
public class ActionTypeBeanInfo extends SimpleBeanInfo {
public PropertyDescriptor[] getPropertyDescriptors() {
try {
Method readMethod = ActionType.class.getDeclaredMethod("value", new Class[0]); // not getValue
Method writeMethod = null;
PropertyDescriptor value = new PropertyDescriptor("value", readMethod, writeMethod);
return new PropertyDescriptor[] { value };
} catch (Exception e) {
return null;
}
}
}