【问题标题】:Spring ViewResolver is mapping to an incorrect viewSpring ViewResolver 映射到不正确的视图
【发布时间】:2016-08-26 18:19:24
【问题描述】:

我正在研究一个简单的应用程序,我在一个在线教程(gontu 系列)中学习了 Spring 注解。

我有一个名为 StudentAdmissionController 的控制器类,它处理来自 spring-dispatcher-servlet 的所有调用。注释如下。为了便于阅读,我只是展示了一个 sn-p。

@RequestMapping(value="/admissionForm.html", method=RequestMethod.GET)
public ModelAndView getAdmissionForm() {

    ModelAndView model = new ModelAndView("admissionForm");
    return model;
}

这将启动一个名为 admissionForm.jsp 的 JSP,它收集两个字段。这部分工作正常。我在 JSP 中的 <form> 标记如下所示。

<form action="/FirstSpringMVCProject/submitAdmissionForm.html" method="post">

我的控制器中有一个注释来处理这个看起来像这样的提交。

@RequestMapping(value="/submitAdmissionForm.html", method=RequestMethod.POST)
public ModelAndView submitAdmissionForm(@RequestParam("studentName") String     name, @RequestParam("studentHobby") String hobby) {

    ModelAndView model = new ModelAndView("admissionSuccess");

    logger.info("Returning " + model.getViewName());
    model.addObject("msg", "Details submitted by you:: Name: " + name + ", Hobby: " + hobby);

    return model;

}   

由于某种奇怪的原因,当它返回到调度程序 servlet 时,它试图显示一个名为 submitAdmissionForm.jsp 的页面(这是注释的名称)。

我不明白它为什么这样做。 GET 的注释工作正常,因为该注释恰好与视图 (admissionForm) 同名。我输入了一个记录器语句并在调试中,提供给模型的视图似乎是正确的视图(admissionSuccess),我想运行一个名为 admissionSuccess.jsp 的文件。但是 viewResolver 正在尝试运行一个名为 submitAdmissionForm.jsp 的文件(它不存在),而恰好是我所说的注释。这不是它应该如何工作的......

我一定是做错了什么...我在 Youtube 上关注的示例运行良好...所以我的 dispatcher-servlet 中的视图解析器发生了什么...请帮助。

我的调度器 servlet 如下所示。

<context:component-scan base-package="com.gontuseries.studentadmissioncontroller" />

<mvc:annotation-driven/>


<bean id="viewResolver" 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver" >

    <property name="prefix">
        <value>/WEB-INF/</value>
    </property> 
    <property name="suffix">
        <value>.jsp</value>
    </property>


</bean> 

【问题讨论】:

  • 能否分享您在 WEB-INF 中的 jsp 位置以及您的 web.xml 文件..?

标签: java jsp spring-mvc servlets


【解决方案1】:

@RequestMapping(value="/submitAdmissionForm.html", method=RequestMethod.POST) 做你要求他做的事情:用 POST HTTP 方法处理一个HttpRequest,并设置映射来处理这些请求,这里你的submitAdmissionForm.html 不多,不多。

如果您想显示另一个视图,请在 ModelAndView 中相应地设置视图名称,并使用 model.setView("admissionSuccess"); 之类的名称并返回它。它会做得很好;)

在返回任何成功视图之前,不要忘记检查表单中是否设置了任何绑定错误 :)

编辑:深入查看您的代码,它看起来还不错。但通常我使用相同的处理程序名称,并使用不同的方法名称,例如 editStudent() 加上 editSubmitStudent() 但在我的情况下它们指向相同的 URL 处理程序 editStudent.do ,但在你的情况下您似乎更喜欢 editStudent.html ; )

OK : 在你的 JSP 表单标签中设置动作 &lt;c:url value="/admissionForm.html" var="admissionFormUrl"&gt; 并使用它来相应地提交你的表单 form action=${admissionFormUrl} 到你的处理程序映射。它会解决这个问题。

干杯!

【讨论】:

    【解决方案2】:

    感谢您的回复。我发现了我的问题。很傻。我在类文件的顶部导入了错误的库。

    这是我应该导入的

    导入 org.springframework.web.servlet.ModelAndView;

    我不小心选择了这个

    导入 org.springframework.web.portlet.ModelAndView;

    这就是它行为不端的原因......一旦我改变它,它就可以正常工作了。

    问候,

    阿吉特

    【讨论】:

      猜你喜欢
      • 2014-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-26
      • 2011-04-14
      • 2017-08-08
      相关资源
      最近更新 更多