Можно ли вставить разные java.lang.Objects из JSP <form>в карту в Struts2? - PullRequest
0 голосов
/ 03 мая 2011

Struts2 вставляет java.lang.Strings в Карты по умолчанию, но ... есть ли способ переопределить это поведение для некоторых параметров и вставить различные объекты, используя множество пользовательских преобразователей типов?

Например, в Javaкласс мы можем объявить HashMap и поставить что-то вроде:

myHashMap.put(“name”,”myName”);    //this is a String
myHashMap.put(“id”,new Integer(“101”)); //this is an Integer
myHashMap.put(“date”,java.util.Calendar.getInstance().getTime()); //this is a Date

Можно ли назначить правильный java.lang.Object непосредственно из <s:form> с помощью преобразователей типов?

Если у вас есть что-токак это в вашем <s:form>:

<s:textfield name="myHashMap['name']"/>
<s:textfield name="myHashMap['id']"/>
<s:textfield name="myHashMap['date']"/>

Каждое значение заканчивается как java.lang.String внутри HashMap, вместо того, чтобы иметь строку, целое число и дату ...

IЯ попытался создать свой собственный конвертер типов, но безуспешно ... Я думаю, Struts2 хочет POJO с установщиками и получателями для каждого параметра, но HashMap использует метод «put(Key,Value)».У меня есть сеттеры и геттеры для «myHashMap», но я подумал, что Struts каким-то образом будет использовать его как POJO при настройке параметров (при вызове «put(Key,Value)»).

Я создал «MyAction-conversion.properties».»И записал это:

date=app.converter.MyDateConverter

Это не сработало ... Тогда я попытался также сделать это:

myHashMap['date']=app.converter.MyDateConverter     # (didn't work)
myHashMap.date=app.converter.MyDateConverter     # (didn't work)

Преобразователь вообще не вызывается!У меня есть класс «MyDateConverter», и он работает нормально.Если я использую POJO (вместо HashMap) и создаю сеттеры и геттеры внутри POJO для «name», «id» и «date», это прекрасно работает.Но дело в том, что я хочу использовать что-то более общее, например, HashMap, чтобы изменить имя параметров в форме или добавить больше без необходимости создания другого POJO.

На данный момент этоработает с использованием HashMap, если вы ожидаете получать только строки, но я не знаю, как вызвать конвертер типов для получения пользовательских объектов.Конвертер не вызывается, и я всегда заканчиваю строкой.

Ответы [ 2 ]

1 голос
/ 30 июня 2011

struts2 может конвертировать java.util.Date из String без кодирования вашего конвертера. Infact, 'date' является типом String, Struts не может найти его по содержанию, но по типу.

0 голосов
/ 03 мая 2011

Сомнительно, и если вы можете, не надо. Это потребует использования необработанной карты и приведения для извлечения значений. Типа безопасности твой друг.

Но дело в том, что я хочу использовать что-то более общее, например, HashMap, чтобы изменить имя параметров в форме или добавить больше без необходимости создания другого POJO.

Это не лучший дизайн. Придерживайтесь подхода POJO.

...