我正在将Struts 1应用程序迁移到Struts2,并尝试最小化所需的代码更改。
我需要知道如何在Struts2 Action类中访问ActionForm。下面是我当前的代码,当尝试访问ActionForm时我得到了NPE。

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的最佳方法是什么?感谢您的时间。

最佳答案

表单(Struts2中的模型)应进行初始化以防止NPE。

private DeptBuidingFormBean form = new DeptBuidingFormBean();
ModelDriven操作允许直接从值堆栈访问视图层上的模型,即无需使用modelform前缀。 modelDriven拦截器应位于操作的拦截器堆栈上。默认堆栈包含此拦截器。

从文档:

注意:ModelDrivenInterceptor仅在模型是而不是null 时将模型推入堆栈,否则它将被忽略。

在动作类中,您可以在内部使用一个字段。

09-07 20:19