从Spring 2.5中的视图访问模型对象

时间:2010-10-26 17:32:45

标签: ajax spring-mvc

有没有办法在Spring 2.5中的View上访问Controller模型中的对象?我正在使用SimpleFormController但是没有使用正确的Validator,我直接对onSubmit()方法执行检查,因为我在客户端使用jQuery并且我不想要整个ViewForm(一个完整的页面)在出现错误时显示(在这种情况下,我发回带有一些错误字符串的HTML块)。

因此我在onSubmit()中创建自己的地图,但我无法从JSP页面中读取它。在Spring 2.5中有没有一种干净的方法呢?

这是我的控制器的第一个版本:

protected ModelAndView onSubmit( Object command,
                                 BindException errors ) throws Exception {

  User user = ( User )command;

  // This is a common validator that I wanted to remain untouched.
  validator.validate( user, errors );

  // In this way I wanted to try to have both errors and the model in the view.
  return new ModelAndView( getSuccessView(), "model", errors.getModel() );
}

由于我无法从我的jsp访问错误列表,我试图通过使用一个类(KeepInformedPageData)更改控制器,该类重新映射模型和我知道如何访问的新地图中的错误: / p>

protected ModelAndView onSubmit( HttpServletRequest request,
                                 HttpServletResponse response,
                                 Object command,
                                 BindException errors ) throws Exception {

  KeepInformedPageData pageData = new KeepInformedPageData( messageSource, request.getLocale() );
  User user = ( User )command;

  // This is a common validator that I wanted to remain untouched.
  validator.validate( user, errors );

  // As I couldn't access the model provided by errors.getModel(), I tried to 
  // build up my own model but unfortunately with the same result.
  pageData.addErrors( errors );
  pageData.addCommandModel( errors.getModel() );

  return new ModelAndView( getSuccessView(), "model", pageData.getRebuiltModel() );
}

我在jsp方面尝试了所有可能的组合,但没有结果,这些是一些尝试:

<br />
${model.command.email}
<br />
${model.errors.defaultMessage}
<br />
<form:form name="command" action="index.htm" method="POST">
  <form:errors path="model.invalid.email" />
  <div>Email <input type="text" name="email" value="Your email address"></div>
  <div><input type="submit" value="Submit" /></div>
</form:form>

所以最后一个问题是:如何访问从控制器收到的Map?

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

好吧,也许这太简单了,甚至不能被认为是一个问题:在尝试处理作为控制器中的参数接收的“错误”对象时,我意识到有一个方法“getModel()”并且从这样一个属性我试图让所有的子属性都来自命令,这就是错误推动我走向错误的方向。

我现在只是从Controller传递“errors”对象:

return new ModelAndView( getSuccessView(), "dataBlock", errors );

我正在使用JSP页面中“errors”对象中的属性:

<div>${resultBlock.fieldError.defaultMessage}</div>