2013-09-24 73 views
3

我正在尝试使用属性文件的自定义类型转换进行操作。Struts 2类型转换器问题

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 

我试图把重点豆,长方形等,但其不工作,它不使用转换器类。

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

我的struts 2版本是2.3.15.1,任何想法可能是什么问题。

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

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

+3

你试过这个'rectangle = struts2.typeconverters.RectangleTypeConverter'吗? –

+0

是的,我也尝试过,它不工作。只有当我没有选择时,我才在这里发布。 – Pankaj

+0

不确定模型驱动转换适用于操作。您可以将转换器应用于bean或全局。 –

回答

0

如果你的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中解释的方法(请参阅标题为将类型转换器应用于操作)。如果你发现一个以前的Struts 2版本在那里工作,让我知道。

Bruce Phillips

+0

谢谢布鲁斯,在http://www.journaldev.com/2221/struts-2-ognl-tutorial-with-custom-type-converter-example更新了我的文章和项目ZIP文件 – Pankaj

0

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

+0

我知道它的工作原理,请参阅我的帖子片段“如果我使用@TypeConverter注释或全局转换器,那么它的工作正常。” “ – Pankaj

0

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

你必须与FULLPATH,而不仅仅是属性名称一起使用正确的类名。

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

+0

我试过你的建议全类和转换器的名称,但即使它不工作,你没有告诉我要在全球范围内做到这一点,对吧?关于包名,它只是举个例子。 – Pankaj

+0

全球水平是什么意思? –

+0

用于xwork-conversion.properties文件中所有操作类的全局手段。 – Pankaj