Я пытаюсь создать динамическое веб-приложение, используя интерфейс ModelDriven
с Struts2. Я работал с Struts1, но это моя первая попытка Struts2.Struts2 с использованием ModelDriven не загружает значения формы POST в модель
Я могу заполнить форму из значений, хранящихся в базе данных, но когда я изменяю значения и пытаюсь обновить базу данных, значения формы не загружаются в Модель.
Я загрузил весь проект здесь https://bitbucket.org/tfeinstein/vikos.git (для этого на данный момент требуется база данных MySQL).
После того, как у вас есть проект загружен:
- Перейти к
http://localhost/Vikos/secure/user
. - Вы будете перенаправлены на страницу входа. Введите: logon email = [email protected] и пароль = пароль.
- Вы будете отправлены на страницу
User
с формой, заполненной из базы данных. Если вы обновите поле «Фамилия» и нажмите кнопку<Update>
, оно должно обновить значение в базе данных, но оно не передает значение обратно.
Как получить значения из HTML-формы в модель?
UPDATE
Я переименованная этот пост и изменил содержание немного, чтобы более точно описать то, что происходит. Я также добавил код отладки к методу UserAction.prepare()
. Похоже, Struts2 пытается загрузить свойства UserModel
с помощью массива String (parmValues
) в отличие от первого элемента массива параметров (correctVal
).
public void prepare() throws Exception {
// BEGIN - ADDED FOR DEBUGGING PURPOSES
Map parameters = request.getParameterMap();
Set keys = parameters.keySet();
Iterator iter = keys.iterator();
String key;
String[] parmValues;
while (iter.hasNext()) {
key = iter.next().toString();
parmValues = (String[])(String[])parameters.get(key);
if (parmValues.length == 1) {
String correctVal = parmValues[0];
System.out.println(correctVal); // This is printing out the correct updated form values.
}
}
// END - ADDED FOR DEBUGGING PURPOSES
determineCrudType();
}
13: 21: 42,773 [HTTP-био-80-Exec-7] ERROR coxiParametersInterceptor - Уведомление разработчика (набор struts.devMode ложь, чтобы отключить это сообщение): Неожиданное исключение пойманы параметр ' электронная почта 'на' класса com.codedeart.vikos.action.UserAction: Ошибка установки выражения 'электронной почты' со значением '[Ljava.lang.String; @ 7e227c19'
13: 21: 42,775 [HTTP-био- 80-exec-7] ERROR coxiParametersInterceptor - Уведомление разработчика (установите struts.devMode в false, чтобы отключить это сообщение): Неожиданный Исключение пойманы установка 'ПгвЬЫате' на «класса com.codedeart.vikos.action.UserAction: Ошибка установки выражения 'ПгвЬЫате' со значением '[Ljava.lang.String; @ 378da3ff'
13: 21: 42,776 [ http-bio-80-exec-7] ОШИБКА coxiParametersInterceptor - Уведомление разработчика (установите struts.devMode в false, чтобы отключить это сообщение): Неожиданное исключение поймало параметр 'lastName' on 'class com.codedeart.vikos.action.UserAction : установка выражение ошибки 'LastName' со значением '[Ljava.lang.String; @ 3409d6d7'
13: 21: 42,778 [HTTP-био-80-Exec-7] ОШИБКА coxiParametersInterceptor - Dev Уведомление eloper (set struts.devMode to false, чтобы отключить это сообщение): Неожиданное исключение поймало параметр 'middleName' on 'class com.codedeart.vikos.action.UserAction: установка выражение 'MiddleName' со значением ошибки '[Ljava.lang.String; @ 13b29db7'
UPDATE - Round 2
Похоже, что этот вопрос похож на те, о которых сообщили другие которые исправили его, используя Преобразователи пользовательского типа. Я попытался реализовать конвертер настраиваемого типа на основе этого tutorial. Я до сих пор не дошел до того, что делаю любое преобразование типов, но методы моего UserTypeConverter не срабатывают. Я загрузил последний код в BitBucket.
P.S .:
меня были проблемы с моей JSP и бэкенд распорки реализации. Ответ заключается в том, чтобы следовать рекомендациям Ученны и Романа ниже. Я буду продолжать обновлять свой проект в BitBucket, поэтому, надеюсь, никто больше не должен делать эти ошибки.
Опубликовать полный стек, он выглядит как предупреждение, но значения заданы для модели, а не для действия. –