2010-06-10 42 views
4

如何使用Struts2將空字符串轉換爲int。當應用程序遇到這個沒有值的參數時,如從一個空的文本字段,它會拋出以下異常。Struts2將空字符串參數轉換爲「int」

java.lang.NoSuchMethodException: 
com.XXXXXXXXXXXX.setID([Ljava.lang.String;) 

凡ID是一個整數,網址是:

Something.action ID = &其他= RAWR

有沒有辦法做到這一點,而無需使用整數(類)?我必須寫一個類型轉換器嗎?

+1

爲什麼你不想要一個Integer?這是推薦的方式,特別是對於bean的屬性。 – leonbloy 2010-06-10 02:16:12

+0

這是一個字符串數組(因爲可能有多個相同名稱的值) – 2010-06-10 03:55:51

回答

5

如果你聲明你的id參數爲Integer,struts會將空字符串轉換爲null。

public void setId(Integer id){ 
... 
} 

來源:http://struts.apache.org/2.0.14/docs/type-conversion.html#TypeConversion-NullandBlankValues

空和空值

某些屬性不能被設置爲null。 像布爾和int這樣的基元不能 爲空。 如果您的動作需要或者 將接受空值或空值,請使用 對象等值布爾和 整數。類似地,不能在原語上設置空字符串「」 。在寫作時間 時,無法在BigDecimal或 BigInteger上設置空白字符串 。使用服務器端驗證 可以防止在屬性上設置無效值 (或適當處理 轉換錯誤)。

+1

哦 - 我剛纔看到你已經知道這個... Integer的不好? 將「」轉換爲什麼int值? 0? -1?一些已知的常量? – 2010-06-10 02:29:52

1

我不知道爲什麼你不喜歡首先使用Integer。但是,您可以將您的設置方法設爲:

public void setId(String id) { 
    ....    // convert your string to int here, as you wish 
    this.id = intId; // 
} 

如果您有一些默認值。您可以使用commons-lang StringUtils.defaultIfEmpty(...)方法。

訪問者仍然是public int getId(){...}。嘗試一下。

+0

要小心,有時使用不同類型的setter和getter可能會混淆OGNL。如果是這樣,你可能需要讓getId()也返回一個字符串。 – 2010-06-10 11:19:28

+0

感謝您的鏈接。我試圖找到更通用的解決方案,因爲我們在整個應用程序中使用「int」,並且我希望不必將它們全部轉換爲Integer。 我可以保留成員爲「int」,但寫一個setId(Integer id)方法嗎? – partkyle 2010-06-10 17:28:06

+1

「我可以將該成員保留爲」int「,但可以寫一個setId(Integer id)方法嗎?」你可以,但問問自己,如果調用'setId(null)'會發生什麼。 – leonbloy 2010-06-10 18:32:39