У вас есть действие custprofileview
, которое показывает страницу JSP со всеми сведениями о клиенте, а в моем JSP все поля похожи на мои
<s:textfield name="custprofileVO.email" value="%{custprofileVO.email}" />
<s:textfield name="custprofileVO.phone" value="%{custprofileVO.phone}" />
и так далее, и есть кнопка отправки, которая вызывает действие updatecustprofile
.
В updatecustprofile
Action вместо прямого сопоставления свойств у меня есть переменная-член private CustprofileVO custprofileVO;
с сеттером и геттером.
В классе CustprofileVO
у меня есть такие поля, как email
, phone
и все остальные поля с их методами установки и получения.
Проблема: в updatecustprofile
Action я реализую Prepareable
интерфейс, а при реализации метода prepare()
у меня есть custprofileVO.setDefaultID("Select");
и я устанавливаю еще 4 поля, но когда я запускаю программу, нажимая кнопку отправки, я получаю NPE
в самом первая строка custprofileVO.setDefaultID("Select");
Похоже, что фреймворк не создает экземпляр CustprofileVO custprofileVO
. Если я вручную создам экземпляр custprofileVO
чуть выше настройки поля (выполнив custprofileVO = new CustprofileVO()
, тогда это сработает. Проблема в том, что в идеале структура struts2 должна дать мне экземпляр, который он не делает, хочу понять причину.
Кроме того, если я вручную установил custprofileVO
в методе подготовки, он работает, но я также применил проверку с использованием XML, где мое имя поля custprofileVO.email
, его проверка, а затем custprofileVO.phone
его проверка.
Когда я пытаюсь проверить по нажатию кнопки отправки, проверка выполняется, но на экране я вижу сообщения для всех полей, поскольку данные во всех текстовых полях исчезают.
Почему удаляются данные?