【发布时间】:2012-09-06 21:42:42
【问题描述】:
例如,我想在用户点击页面中的“注册”按钮后,才在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 实例。
如何解决?
【问题讨论】:
-
我猜你真的别无选择。在你的 ajax 中,你引用的是 modeAttribute="reg" 所以你得到这个错误是正常的。当 ajax 在您的页面中执行时,您没有任何对象“reg”
-
嗨@rptmat57,您误解了错误。 AJAX 代码由 CALLBACK 函数中的“注册”按钮调用。当我在浏览器地址栏中输入 URL localhost:8080/.../initPage.do 并按 Enter 时出现错误。
-
如果 form:form 是服务器端标签,您希望它如何工作?尝试从客户端修改 jsp 是个坏主意。无论如何,您可以使用 Spring MVC 呈现表单,然后使用 AJAX 帖子提交生成的 html 表单。
-
嗨@BorisTreukhov,你也误解了代码。我给出的示例是当用户单击“注册”按钮时显示一个弹出窗口。但是我不想在用户单击“注册”按钮之前初始化表单实例。那些HTML代码只是为了显示一个弹出对话框,不管是静态html还是动态html,我需要的是使用AJAX初始化Form实例然后显示弹出窗口,我不想初始化所有表单随着页面加载,因为在我的页面中我有许多不同的按钮,每个按钮使用不同的 Form 类
-
@BorisTreukhov 不是误解代码的人...
标签: jquery ajax spring-mvc