0

例如,我想在用户单击页面中的“注册”按钮后才在 Controller 中执行“initRegister”方法

@Controller
public class UserController
{

    @RequestMapping(method=RequestMethod.GET, value="/initPage.do")
    public String initPage(Model model)
    {
        return "home.jsp";
    }

    @RequestMapping(method=RequestMethod.GET, value="/initRegister.do")
    @ResponseBody
    public void initRegister(Model model)
    {
        model.addAttribute("reg", new RegisterForm());
    }
}

“注册”按钮调用的 JQuery AJAX:(显示一个用于注册的小弹出窗口)

$.get('initRegister.do', function()
            { 
               $('body').append('<div>'
                   +'<form:form method="POST" modelAttribute="reg" '
                   + 'commandName="reg" action="register.do">'
                   + 'name: <form:input path="name"/>'
                   + '<input type="submit" value="Submit">'
                   + '</form:form>'
                   + '</div>');
            }
      );

但是,当我访问“http://localhost:8080/.../initPage.do”时,在浏览器中出现以下错误

Neither BindingResult nor plain target object for bean name 'reg' available as request attribute

该页面仅在我移动“model.addAttribute("reg", new RegisterForm());”时才有效 到“initPage”方法。但是在用户单击“注册”按钮之前,我不需要创建 RegisterForm 实例。

如何解决?

4

1 回答 1

2

我假设这段代码包含在 home.jsp 中

$.get('initRegister.do', function()
        { 
           $('body').append('<div>'
               +'<form:form method="POST" modelAttribute="reg" '
               + 'commandName="reg" action="register.do">'
               + 'name: <form:input path="name"/>'
               + '<input type="submit" value="Submit">'
               + '</form:form>'
               + '</div>');
        }
  );

你不能这样做。当 initPage.do 被渲染时,该form:form标记在服务器端进行处理,因为它是一个 JSP 标记并且在 javascript 或 html 中没有任何意义。我很惊讶你得到了和你一样有意义的信息。

渲染 JSP 时,它不关心标签是 HTML、javascript 还是任何地方。如果它看到一个 JSP 标记,它将执行适当的处​​理。试图将 JSP 代码呈现到 html 页面中以响应 AJAX 调用是行不通的,因为 JSP 标记的处理必须在服务器上进行。

通常,您会希望以 JSON 格式(或者我猜是 XML)返回一个对象并在 javascript 中使用它。查看jQuery 的 get 命令的文档。您的成功处理程序函数有一个“数据”参数,它将包含来自您的 Ajax 调用的响应。为了使它起作用,您应该将initRegisterfrom的返回类型更改为void其他类型。您可以使用 Jackson 进行从 POJO 到 JSON 的转换。

于 2012-09-05T22:24:54.717 回答