2013-09-24 103 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