Преобразователь типа ognl с несколькими полями

У меня есть форма с (на данный момент) двумя полями и я отправляю следующее:

capture.id = 213
capture.description = DescriptionText

«Захват» целевого объекта неизменяем, и я хотел бы предоставить преобразователь типов, который принимает оба значения и вызывает конструктор. Чего я не могу сделать, так это заставить TypeConverter вызываться.

Если ввод просто:

capture = foo

Затем вызывается преобразователь типов, но, очевидно, это не очень полезно, есть ли возможность сделать так, чтобы ognl делегировал мне остальную часть остальной части диалога типов, возможно, передав карту параметров?

Есть идеи? Возможно ли это даже в struts2

версии: struts 2.0.14 и ognl 2.6.11

РЕДАКТИРОВАТЬ: я немного почитал об этом, и моя следующая попытка показалась мне хорошим планом. Моя теория заключалась в том, что использование синтаксиса карты заставит Ognl преобразовать значения в карту, а затем вызвать мой преобразователь с этой картой, чтобы преобразовать ее в мое значение.

capture[id] = 213
capture[description] = DescriptionText

Нет, кажется, это вообще не имеет значения.


person Gareth Davis    schedule 29.10.2009    source источник


Ответы (2)


Я сделал это так, чтобы в JSP было следующее:

<s:textfield name="capture" value="capture.id" />
<s:textfield name="capture" value="capture.description" />

В преобразователе типов параметр String[] values ​​метода convertFromString будет содержать оба значения, необходимые для создания нового неизменяемого захвата. При условии, что вы соблюдаете порядок текстовых полей (или, что еще лучше, инкапсулируете его в файл тегов), вы можете использовать индексы массива значений, чтобы надежно получить соответствующее поле объекта захвата.

Одна странная часть этого подхода заключается в том, что метод convertToString на самом деле ничего не делает для вас. Вы можете вернуть либо идентификатор, либо описание (или объединить их вместе), но, поскольку вы используете атрибут значений в JSP, это не имеет значения.

person Dave    schedule 28.03.2012
comment
Спасибо за ответ +1 за усилия, но это было в другой жизни, три работы назад в далекой галактике, поэтому я даже не могу вспомнить, что я делал. - person Gareth Davis; 29.03.2012

Кажется, что ответ нет, вы не можете сделать это с помощью struts2.

Я разместил этот вопрос в списке рассылки struts2, и кажется, что просто невозможно представить несколько полей в TypeConverter.

Предлагаемое альтернативное решение состоит в том, чтобы иметь изменяемый объект с сеттерами, а затем иметь некоторую форму метода «petify», чтобы предотвратить любые будущие изменения.

Для моего проекта я фактически реализовал еще один перехватчик struts для реализации моего поведения привязки пользовательских параметров.

person Gareth Davis    schedule 04.11.2009