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

时间:2009-10-26 10:21:13

标签: java struts2 enums

我正在尝试使用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 个答案:

答案 0 :(得分:5)

它应该立即将字符串绑定到枚举。我认为枚举类型转换器一直处于默认配置,因为我认为2.1.x。

  • 你使用的是什么版本的struts 2?

如果您不确定以下内容是否位于我的xwork-conversion.properties 2.0.14应用

java.lang.Enum = com.opensymphony.xwork2.util.EnumTypeConverter

编辑:在回复评论时,如果您需要忽略分配枚举的案例,您有以下选择:

  • 将枚举的值更改为小写 - 不是很好的风格,可能会使您的代码看起来有点奇怪
  • 为java.lang.Enum编写一个新的不区分大小写的转换器(只需复制xwork one和toUpper输入,我猜)
  • 为此特定情况添加新的setModule(String)

答案 1 :(得分:0)

我在从操作转发到重定向操作(而不是操作转发)时遇到类似的问题,Struts无法正确识别我正在使用参数List<Enum>而我必须使用代理方法来将String参数转换为List<Enum>