Spring MVC IllegalStateException Ошибка - PullRequest
1 голос
/ 06 июня 2011

Я пытаюсь создать простой тестовый сайт, используя 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 - это не более, чем имя пользователя, пароль и группа получателей / установщиков, как и любой бин. Приложите изображение ошибки, которую я получаю при сборке, пожалуйста, дайте мне знать, если вам нужна дополнительная информация, чтобы помочь мне. Error Picture

Мой сервлет.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>

Ответы [ 3 ]

1 голос
/ 06 июня 2011

Я думаю, что вы запрашиваете напрямую login.jsp вместо прохождения через контроллер Spring.Вот почему к моменту рендеринга файла JSP пользователь не присоединится к вашему запросу, так как запрос вообще не включает DispatcherServlet.

Это потому, что ваш welcome-file-list указывает на login.jsp иЯ предполагаю, что login.jsp не находится под WEB-INF/{something}, но находится в корне веб-приложения, поэтому доступен напрямую.

Чтобы проверить, верно ли мое предположение, попробуйте запросить: http://localhost:8080/login.htmпросто http://localhost:8080.

1 голос
/ 07 июня 2011

Не могу поверить, что был таким глупым. Я понял свою проблему. Вот почему я ненавижу аннотации ... в моем файле servlet.xml у меня было сканирование компонентов, сканирующее неправильный пакет, поэтому ни одна из моих аннотаций не была выбрана. Рефакторинг - это боль, а?

TL; DR: убедитесь, что вы указали правильный пакет в вашем servlet.xml под

1 голос
/ 06 июня 2011

Имя вашей команды не user, это userAccess. Ошибка говорит вам, что вы не можете найти имя команды пользователя в вашем теге.

Редактировать: Хорошо, рассмотрите возможность разделения атрибута модели на его собственный метод с использованием аннотации @ ModelAttribute .

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

Сказав, что то, что вы сделали, должно работать. В качестве альтернативы попробуйте вернуть модель и вид.

return new ModelAndView("login", model);

Возможно, он не собирает карту модели в подписи ... но я подумал, что это сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...