Struts2 преобразует пустой строковый параметр в "int" - PullRequest
4 голосов
/ 10 июня 2010

Как преобразовать пустую строку в int с помощью Struts2.Когда приложение встречает этот параметр без значения, например, из пустого текстового поля, оно выдает следующее исключение:

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

Где ID - это целое число, а URL-адрес:

Something.action? ID = & other = rawr

Есть ли способ сделать это без использования Integer (класса)?Должен ли я написать конвертер типов?

Ответы [ 2 ]

5 голосов
/ 10 июня 2010

Если вы объявите свой параметр id как целочисленные структуры, преобразует пустую строку в ноль.

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

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

Пустые и пустые значения

Некоторые свойства не могут быть установлены в нуль.Примитивы типа boolean и int не могут быть нулевыми. Если вашему действию необходимо или будет принимать нулевые или пустые значения, используйте эквиваленты объектов Boolean и Integer. Аналогично, пустая строка "" не может быть установлена ​​в примитиве.Во время написания, пустая строка также не может быть установлена ​​для BigDecimal или BigInteger.Используйте проверку на стороне сервера, чтобы предотвратить установку недопустимых значений в ваших свойствах (или правильно обработать ошибки преобразования).

1 голос
/ 10 июня 2010

Не знаю, почему вы не любите использовать Integer. Тем не менее, вы можете иметь свой метод set как,

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

Если у вас есть некоторые значения по умолчанию. Вы можете использовать метод commons-lang StringUtils.defaultIfEmpty(...).

Accessor все равно будет public int getId(){...}. Попробуйте это.

...