题
我试图让 Struts 2 中的 Action 使用 Enum 作为输入参数。到目前为止我所做的看起来像:
public TestAction {
public enum Module {
VALUE1;
}
private Module module;
public void setModule(Module module) {
this.module = module;
}
public Module getModule() {
return module;
}
}
但是当尝试使用它时,我收到 xwork 转换错误,并且该操作本身甚至不执行。我可以按原样进行这项工作,还是应该自己提供 setModule(String) ?
编辑:我正在使用Struts 2.1.6我正在尝试的URL:/test.action?module=value1
解决方案
它应该立即将字符串绑定到枚举。我认为从 2.1.x 开始,枚举类型转换器就一直处于默认配置。
- 你使用什么版本的struts 2?
如果您不确定以下内容是否在我的中 xwork-conversion.properties
在 2.0.14 应用程序中
java.lang.Enum = com.opensymphony.xwork2.util.EnumTypeConverter
编辑: :作为对评论的回应,如果您需要忽略分配枚举的大小写,您有以下选择:
- 将枚举的值更改为小写 - 这不是很好的风格,并且可能使您的代码看起来有点奇怪
- 为 java.lang.Enum 编写一个新的不区分大小写的类型转换器(只需将 xwork 复制到我猜的输入上部)
- 为此特定情况添加新的 setModule(String)
其他提示
我在从操作转发到重定向操作(而不是向前转发)时遇到类似的问题,Struts无法正确识别我正在使用参数List<Enum>
而且我必须使用代理方法来转换将String参数转换为<=>。
不隶属于 StackOverflow