Вопрос

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

capture.id = 213
capture.description = DescriptionText

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

Если входные данные просто:

capture = foo

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

Есть какие-нибудь идеи?Возможно ли это вообще в struts2

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

Редактировать:Я немного почитал об этом, и моя следующая попытка показалась мне хорошим планом.Моя теория заключалась в том, что использование синтаксиса Map заставило бы Ognl преобразовать значения в map, а затем вызвать мой конвертер с этой картой, чтобы преобразовать его в мое значение.

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

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

Это было полезно?

Решение 2

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

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

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

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

Другие советы

Способ, которым я это сделал, состоял в том, чтобы иметь следующее в JSP:

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top