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, если вы ожидаете получать только строки, но я не знаю, как вызвать конвертер типов для получения пользовательских объектов.Конвертер не вызывается, и я всегда заканчиваю строкой.