5

我正在将一个 Struts 1 应用程序迁移到 Struts2 并尝试最小化所需的代码更改。

我需要知道如何访问ActionFormStruts2Action类。下面是我当前的代码,我在尝试访问时遇到了 NPE ActionForm

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这里的最佳方式是什么?

4

1 回答 1

1

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

private DeptBuidingFormBean form = new DeptBuidingFormBean();

ModelDriven操作允许直接从 访问视图层上的模型valueStack,即不带modelform前缀。

modelDriven拦截器应该在动作的拦截器堆栈上。默认堆栈包含此拦截器。

从文档:

注意:只有当模型不是ModelDrivenInterceptor时才会将模型推入堆栈,否则将被忽略。null

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

于 2014-12-16T10:31:03.047 回答