0

我试图让弹簧表单工作,我只使用弹簧 mvc,当我尝试添加带有 a 的弹簧表单标签时,modelAttribute它失败并说没有ContextLoaderListener找到。

这是我创建表单的 JSP 代码:

<sf:form method="POST" cssClass="form-horizontal" modelAttribute="companySearch">

这就是我如何找到我的 bean 并且我的 mvc 是注释驱动的

<context:component-scan base-package="com.mubasherjson.controllers" />
<context:annotation-config />
<bean id="companySearch" class="com.mubasherjson.models.CompanySearch" />
<mvc:annotation-driven />

这是我的 post 方法代码

@RequestMapping(method = RequestMethod.POST)
    public String showResultPage(Model model){
        model.addAttribute(new CompanySearch());
        return "result";
    }

我也用@ModelAttribute注解试过了,但还是不行

为什么我必须在这里创建一个 ContextLoaderListener ?基本上 CompanySearch 是一个模型,它是一个简单的 POJO,如果我删除表单或评论它一切正常。这里似乎有什么问题,我在这里检查了各种问题,但在我的情况下仍然没有得到它

4

1 回答 1

0

引导侦听器以启动 Spring 的根 WebApplicationContext。只需委托给 ContextLoader。

Doc
是容器调用的servlet监听器。它创建应用程序上下文并加载 XML bean 定义文件。这意味着一切都从它开始,并且必须拥有它。

你可以定义它

<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>

ContextLoaderListener 与 DispatcherServlet

在 Spring MVC 中,有两个上下文。一种是由 ContextLoaderListener 启动的应用程序上下文或全局上下文。它采用 contextConfigLocation 参数中提到的所有配置文件。
现在,如果您还使用 Spring MVC,则需要 Dispatcher servlet,它会启动另一个容器,该容器也称为 Web 应用程序容器。此容器将全局容器作为父容器。
如果您只在后端使用 Spring,那么全局上下文就足够了。但是,如果您也将 Spring MVC 用于前端,那么您还需要 Dispatcher Servlet。

(从http://www.coderanch.com/t/516563/Spring/DispatcherServlet-ContextLoaderListener复制,我太懒了,已经有很多东西了)

于 2013-04-10T10:49:00.187 回答