Struts 2型转换器问题

时间:2013-09-24 22:19:55

标签: java struts2

我正在尝试使用属性文件进行自定义类型转换以进行操作。

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文件与action类并行,转换器配置为:

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

您必须使用正确的类名和fullpath,而不仅仅是属性名称。

mypackage.Rectangle=struts2.typeconverters.RectangleTypeConverter - 希望你真的有一个名为struts2的软件包,虽然我会严格避免这样的软件包名称。

答案 2 :(得分:0)

如果您的Action类正在使用Model Driven,那么您需要按照此方法使用自定义类型转换器:

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中解释的方法(请参阅“将类型转换器应用于动作”一节)。如果您找到之前的Struts 2版本,请告诉我。

布鲁斯菲利普斯