【问题标题】:Struts 2 type converter issueStruts 2 类型转换器问题
【发布时间】:2013-11-30 04:05:07
【问题描述】:

我正在尝试将自定义类型转换与属性文件一起使用。

Action 类正在为 bean 属性实现 ModelDriven。

public class WelcomeAction extends ActionSupport implements ModelDriven<MyBean>{

public String execute(){
    return SUCCESS;
}

private MyBean bean = new MyBean();

@Override
public MyBean getModel() {
    return bean;
}
}

Bean类是:

public class MyBean{

private Rectangle rectangle;
public Rectangle getRectangle() {
    return rectangle;
}

public void setRectangle(Rectangle rectangle) {
    this.rectangle = rectangle;
}

}

我有WelcomeAction-conversion.properties 文件与动作类并行,转换器配置为:

bean.rectangle=struts2.typeconverters.RectangleTypeConverter

我尝试将密钥作为 bean、矩形等,但它不起作用,它没有使用转换器类。

如果我使用@TypeConverter 注释或全局转换器,那么它工作正常。

我的 struts 2 版本是 2.3.15.1,不知道可能是什么问题。

更新:创建了一个问题https://issues.apache.org/jira/browse/WW-4249

得到了正确的实现方式:http://www.journaldev.com/2221/struts-2-ognl-tutorial-with-custom-type-converter-example

【问题讨论】:

  • 你试过这个rectangle=struts2.typeconverters.RectangleTypeConverter吗?
  • 是的,我也试过了,它不起作用。我只有在没有选择的时候才在这里发布。
  • 不确定是否可以将转化应用于操作的模型驱动。您可以将转换器应用于 bean 或全局。
  • 我在使用相同的 struts 版本时遇到了同样的问题。这可能是这个 Struts 版本的一个错误。
  • @Pankaj:由于模型位于堆栈顶部,因此应用于操作的转换不会生效。不是错误。

标签: java struts2


【解决方案1】:

如果您的 Action 类使用模型驱动,那么您需要遵循此方法来自定义类型转换器:

http://struts.apache.org/release/2.3.x/docs/type-conversion.html(请参阅标题为将类型转换器应用于 bean 或模型的部分)。

在您的示例中,我将转换属性文件名更改为 MyJavaBean-conversion.properties 并将其放在与 MyJavaBean.java 相同的包下。

在 MyJavaBean-conversion.properties 中,我将密钥更改为:

      rectangle=com.journaldev.struts2.typeconverters.RectangleTypeConverter 

然后我构建了 .war 文件并在 Tomcat 7 下运行您的示例。矩形转换工作正常。

当您的 Action 类使用 ModelDriven 时,我认为您永远无法使用 http://struts.apache.org/release/2.3.x/docs/type-conversion.html 中解释的方法(请参阅标题为将类型转换器应用于 Action 的部分)。如果您发现以前的 Struts 2 版本确实有效,请告诉我。

布鲁斯·菲利普斯

【讨论】:

  • 感谢 Bruce,在 journaldev.com/2221/… 更新了我的文章和项目 ZIP 文件
  • 该答案适用于 bean,但不适用于动作类
【解决方案2】:

您需要在类路径中创建xwork-conversion.properties。在该文件中,您会将Rectangle 类的完整类名映射到Converter 类。按照以下网址中的示例进行操作。 检查thisthis 的帖子。他们将帮助您解决问题。

【讨论】:

  • 我知道它工作正常,请参阅我的帖子 sn-p “如果我使用 @TypeConverter 注释或全局转换器,那么它工作正常。”
【解决方案3】:

bean.rectangle=struts2.typeconverters.RectangleTypeConverter - 这是错误的

您必须使用正确的类名和完整路径,而不仅仅是属性名。

mypackage.Rectangle=struts2.typeconverters.RectangleTypeConverter - 希望你真的有一个名为 struts2 的包,尽管我会严格避免使用这样的包名。

【讨论】:

  • 我用完整的类和转换器名称尝试了你的建议,但即使那样它也不起作用,你没有告诉我在全球范围内这样做,对吧?关于包名,仅举个例子。
  • 全局级别是什么意思?
  • 全局意味着 xwork-conversion.properties 文件中所有操作类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-18
  • 1970-01-01
  • 1970-01-01
  • 2011-11-17
相关资源
最近更新 更多