Spring 3 MVC - 模型不在JSP页面中显示

时间:2013-05-06 09:59:52

标签: java jsp spring-mvc model apache-tiles

从表面上看,这个问题听起来很像以前在SOF上提出过的问题,但我很久以前就试过这些问题,没有运气。

(例如,这个问题spring 3 not rendering model in jsp

所以我有一个扩展了CancellableFormController的Spring 2.0控制器,它包含以下命令将Command对象绑定到JSP页面渲染上的Form:

public class MyFormController extends CancellableFormController {

....

    protected Object formBackingObject(HttpServletRequest request) throws ServletException {
        MyCommand myCommand = new MyCommand();
            ... // add some list info to command object etc in preparation for page render
        return myCommand;
    }

....

}

JSP页面如下所示:

<form:form method="post" commandName="myCommand">

    <c:forEach items="${myCommand.myList}" var="myItem" varStatus="index">

</form:form>

要明确的是,在表单标记定义之间,JSP页面上显示了一个项目列表。这是在任何表单提交发生之前(即在页面呈现时间)。这是一个我们生活在一个美丽简单的世界。一切都是第一次工作,地球上有和平......对不起,足够的讽刺! ;)

好的,所以我很高兴尝试将这个旧代码升级到Spring 3和注释。我当前的问题只是让Command对象在页面加载时呈现。当我在表单字段中输入数据并提交表单等时,数据被正确绑定。我要做的是预先填充Command对象,然后在填充和提交表单之前将该内容呈现到JSP页面中。

我最初尝试过这个:

@Controller
@RequestMapping(value = "/myContextPath")
public class MyFormController {

    ...

    @RequestMapping(method = RequestMethod.GET)
    public ModelAndView initForm(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView mv = new ModelAndView("myTilesViewName");
        MyCommand myCommand = new MyCommand();
        ...
        mv.addObject("myCommand", myCommand);
        return mv;
    }

    ...

}

然后我尝试了以下每种方法(Controller类构造与上面相同):

@RequestMapping(method = RequestMethod.GET)
@ModelAttribute("myCommand")
public String initForm(HttpServletRequest request, HttpServletResponse response) throws Exception {
      MyCommand myCommand = new MyCommand();
      ....
      return "myTilesViewName";
}

@RequestMapping(method = RequestMethod.GET)
public String initForm(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws Exception {
    MyCommand myCommand = new MyCommand();
    ...
    model.addAttribute("myCommand", cmd);
    return "myTilesViewName";
}

我不想添加任何混淆。我“想象”如果我只是返回JSP页面的视图名称,这个问题的答案可能是相同的...但是,我使用Apache Tiles来处理页面选择。我的定义类似于:

<definition name="myTilesViewName" extends=".myTemplate">
    <put-attribute name="title" value="MyTitle" type="string" />
    <put-attribute name="body" value="/WEB-INF/jsp/myPage.jsp" />
</definition>

在使用Spring 2的CancellableFormController代码之前,请记住一切正常。我根本没有改变Tiles配置或JSP页面,所以不要相信它们是这个问题的根源。

非常感谢能够提供任何帮助的任何人。当然感激不尽!

UPDATE:

此问题最终与客户端(JSP页面)相关的问题有关。我的假设“除了控制器之外没有任何改变”是不正确的。真诚地向那些花时间阅读这篇文章并考虑解决方案的人道歉。对于阅读具有相同症状的其他人,请仔细检查您的查看页面(JSP)并确保它们在语法上正确呈现。在我的例子中,我将一个JSP(大约2000行代码)移动到一个子文件夹中,并打破了一个嵌套的jsp导入声明的相对链接。

0 个答案:

没有答案