2014-12-16 8 views
4

Я переношу приложение Struts 1 в Struts2 и пытаюсь свести к минимуму необходимые изменения кода. Мне нужно знать, как получить доступ к ActionForm в классе Action Struts2. Ниже мой текущий код, и я получаю NPE при попытке получить доступ к ActionForm.Как получить ActionForm в Struts2?

Public class DeptBuildingNewAction extends ActionSupport 
implements ServletRequestAware, ServletResponseAware, ModelDriven<DeptBuidingFormBean> { 

private HttpServletRequest request; 
private HttpServletResponse response; 
private DeptBuidingFormBean form; 

public void setServletRequest(HttpServletRequest httpServletRequest) { 
    this.request = httpServletRequest; 
} 

public void setServletResponse(HttpServletResponse httpServletResponse) { 
    log.debug("Inside setServletResponse"); 
    this.response = httpServletResponse; 
} 

public DeptBuidingFormBean getModel() { 
    log.debug("Inside getForm"); 
    return form; 
} 

public void setModel(DeptBuidingFormBean form) { 
    log.debug("Inside setForm"); 
    this.form = form; 
} 

Что является лучшим способом, чтобы получить ActionForm здесь? Спасибо за ваше время.

+0

В какой строке вы получаете исключение из null-указателя? – SMA

+1

Я бы рекомендовал не называть его «ActionForm», поскольку это имеет конкретное значение. Это модель. –

ответ

1

Форма (модель в Struts2) должна быть инициализирована для предотвращения NPE.

private DeptBuidingFormBean form = new DeptBuidingFormBean(); 

ModelDriven действие позволяет получить доступ к модели на вид слое и в действии непосредственно из стека значений, т.е. без model или form префикса. Перехватчик modelDriven должен находиться в стеке перехватчиков действия. В стеке по умолчанию находится этот перехватчик.

Из документов:

Примечание: ModelDrivenInterceptor только подтолкнёт модель в стек, когда модель не null, иначе он будет проигнорирован.

В классе действий у вас есть поле, которое вы можете использовать внутри.

+0

Я не делаю так, если это то, почему требуется ModelDriven. в вашем коде он будет создавать новую форму вместо заполненных данных из запроса. –

+0

Я предполагаю, что проблема с этим подходом заключается в том, что я всегда получаю новый пустой ActionForm. –

+0

@ user2482616 @RaviGupta Для заполнения данных требуется перехватчик 'params', и он не будет делать этого, если модель не находится в' top' стека значений. Без управляемой модели действительный компонент находится сверху (необязательно). Затем связывающие поля ввода, необходимые для использования префикса в имени для доступа к свойствам bean. –

 Смежные вопросы

  • Нет связанных вопросов^_^