Многопольный преобразователь типа OGNL - PullRequest
0 голосов
/ 29 октября 2009

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

capture.id = 213
capture.description = DescriptionText

Целевой объект 'capture' является неизменным, и я хотел бы предоставить конвертер типов, который будет принимать оба значения и вызывать конструктор. Похоже, я не могу заставить TypeConverter быть вызванным.

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

capture = foo

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

Есть идеи? Возможно ли это даже в стойках2

версии: стойки 2.0.14 и ognl 2.6.11

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

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

Нет, это не имеет никакого значения.

Ответы [ 2 ]

1 голос
/ 29 марта 2012

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

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

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

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

0 голосов
/ 04 ноября 2009

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

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

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

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

...