Java 如何在struts 2中使用枚举参数?

Java 如何在struts 2中使用枚举参数?,java,struts2,enums,Java,Struts2,Enums,我试图让Struts 2中的一个操作将枚举用作输入参数。到目前为止,我所做的看起来像: public TestAction { public enum Module { VALUE1; } private Module module; public void setModule(Module module) { this.module = module; } public Module getModule() { return module;

我试图让Struts 2中的一个操作将枚举用作输入参数。到目前为止,我所做的看起来像:

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
如果您不确定2.0.14应用程序中我的
xwork conversion.properties
中有以下内容

java.lang.Enum = com.opensymphony.xwork2.util.EnumTypeConverter
编辑:对于注释,如果需要忽略分配枚举的大小写,可以选择以下选项:

  • 将enum的值改为小写-不是很好的样式,可能会使代码看起来有点奇怪
  • 为java.lang.Enum编写一个新的不区分大小写的类型转换器(只需复制xwork一个,然后插入我猜的输入)
  • 为此特定情况添加新的setModule(字符串)

我只是在从操作转发到重定向操作(而不是转发操作)时遇到了类似的问题,Struts无法正确识别我使用的是参数
列表
,我必须使用代理方法将字符串参数转换为
列表

抱歉,我忘了提到我使用的是Struts 2.1.6。我在谷歌搜索的时候读到它应该是开箱即用的,但它不适合我在上面例子中使用它的方式。可能是拦截器问题?查询字符串是什么样子的/myAction.action?module=VALUE1应该可以正常工作,从请求到操作的绑定内容就是参数拦截器,如果您遇到对话错误,那么它必须已经配置好了。我没有想到用VALUE1而不是VALUE1进行测试。它确实是这样工作的。我猜EnumTypeConverter使用Enum.valueOf,但我真的希望它忽略大小写。