2010-06-10 2 views
4

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

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

Где ID является целым числом, а URL является:

Something.action ID = & другого = Rawr

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

+1

Почему вы не хотите, чтобы вы целое? Это рекомендуемый способ, специально для свойства bean-компонента. – leonbloy

+0

Это массив строк (так как возможно иметь несколько значений, поставляемых с тем же именем) –

ответ

5

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

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

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

Null и пустых значений

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

+1

Ох - Я только что видел, что вы уже знаете об этом ... Целое не в порядке? Какую внутреннюю ценность можно было бы преобразовать? 0? -1? некоторая известная константа? –

1

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

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

Будьте осторожны, иногда использование разных типов для сеттера и геттера может смутить OGNL. Если это так, вам может понадобиться getId() вернуть строку. –

+0

Спасибо за ссылку. Я пытался найти более общее решение, потому что мы используем «int» во всем приложении, и я надеялся не преобразовывать их в Integer. Могу ли я сохранить элемент как «int», но написать метод setId (Integer id)? – partkyle

+1

«Могу ли я сохранить элемент как« int », но написать метод setId (Integer id)?» Вы можете, но спросите себя, что произойдет, если вызывается 'setId (null)'. – leonbloy

Смежные вопросы