【问题标题】:Spring MVC IllegalStateException ErrorSpring MVC IllegalStateException 错误
【发布时间】:2011-06-06 03:41:58
【问题描述】:

我正在尝试使用 Spring MVC 创建一个简单的测试网站,但我似乎无法超越最简单的情况。我有一个 jsp 网站,它是一个“登录”,有 2 个输入和一个提交按钮,但除了错误消息外,它不会显示任何内容。独立使用 Spring 3.0.2 和 Tomcat 6.0.29。

IndexController.java:

@Controller
@RequestMapping("login.htm*")
public class IndexController {
    @RequestMapping(method=RequestMethod.GET)
    public String getLoginPage(Map model){
    UserAccess user = new UserAccess();
    model.put("user", user);    

    return "login";
}

login.jsp:

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    </head>
    <body>
    <form:form action="login.htm" commandName="user">
    <table>
        <tr>
            <td>Enter Username:</td>
        <td><form:input path="username" /></td>
        </tr>
        <tr>
            <td>Enter Password:</td>
        <td><form:password path="password" /></td>
        </tr>
        <tr>
            <td><input type="submit" value="Submit"></td>
        </tr>
    </table>
    </form:form>
    </body>
</html>

我的 UserAccess 类只不过是一个用户名、密码和一堆 getter/setter,就像任何 bean 一样。附上我在构建时遇到的错误的图片,如果您需要更多信息来帮助我,请告诉我。

我的 servlet.xml

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="" />
    <property name="suffix" value=".jsp" />
</bean>

还有我项目的web.xml

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.htm</url-pattern>
</servlet-mapping>

<welcome-file-list>
    <welcome-file>login.jsp</welcome-file>
</welcome-file-list>

【问题讨论】:

    标签: java spring jsp tomcat


    【解决方案1】:

    您的命令名称不是user,而是userAccess。该错误告诉您它在您的标签中找不到用户的命令名称。

    编辑:好的,考虑使用@ModelAttribute 注释将模型属性拆分为自己的方法。

    @ModelAttribute("user")
    public UserAccess formBackingObject() {
        return new UserAccess();
    }
    

    话虽如此,你所做的应该有效。或者尝试同时返回模型和视图。

    return new ModelAndView("login", model);
    

    也许它没有在签名中提取模型图......但我认为这会起作用。

    【讨论】:

    • 对不起,我应该仔细检查一下,我已经编辑了帖子,我正在尽一切努力让它工作并改变它,但即使在改变它之后,它仍然不起作用跨度>
    • 我做了上面的,仍然得到同样的错误。这令人沮丧,因为我找不到确切的问题所在。我已经下载了另一个示例并逐字匹配,但仍然无法正常工作。
    • 从 login.jsp 中取出表单内容。向控制器中的模型添加一些文本或其他垃圾。在您的登录 jsp 上,尝试使用 打印出模型属性 - 如果您甚至看不到打印出的文本,则说明控制器中有问题。考虑将 Map 与 Spring 的 ModelMap 交换为控制器方法签名中的测试。
    • 抱歉,我在该评论中有 2 条单独的建议。第一个 - 保留 Map 模型参数并向地图添加更多属性 - 例如尝试调用 put("test", "sometext"),然后在您的登录页面上尝试打印出文本 - 例如.如果您可以在屏幕上看到“sometext”文本,那么您就知道模型正在工作。如果不能,我会尝试建议 2,即在控制器中将 Map 更改为 Spring 的 ModelMap。
    • 似乎都不起作用。如果删除 form:form 并仅使用 Map 或 ModelMap 放入 c:out,则屏幕上不会出现任何内容。
    【解决方案2】:

    我认为您直接请求 login.jsp 而不是通过 Spring 控制器。这就是为什么在呈现 JSP 文件时没有用户附加到您的请求,因为该请求根本不涉及 DispatcherServlet

    那是因为您的welcome-file-list 指向login.jsp,我假设login.jsp 不在WEB-INF/{something} 下,但它位于Web 应用程序的根目录中,因此可以直接访问。

    要检查我的假设是否正确,请尝试请求:http://localhost:8080/login.htm 而不是简单的 http://localhost:8080

    【讨论】:

    • 我有reuesting login.htm,但是我自己直接请求还是不行
    【解决方案3】:

    我不敢相信我是如此愚蠢。我想出了我自己的问题。这就是我讨厌注释的原因……在我的 servlet.xml 文件中,我让组件扫描扫描了错误的包,所以我的注释都没有被拾取。重构很痛苦,是吗?

    TL;DR:确保在 servlet.xml 的

    下列出正确的包

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 2016-06-13
      • 2012-08-03
      • 2011-12-27
      • 2018-10-12
      • 2014-12-05
      • 2015-03-10
      相关资源
      最近更新 更多