我试图让 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参数转换为<=>。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top