简体   繁体   English

简单的SpringMVC 3登录不起作用

[英]Simple SpringMVC 3 Login doesn't work

I'm trying to make work a simple login webpage in Spring MVC 3.0 through annotations. 我正在尝试通过注释使工作成为Spring MVC 3.0中的简单登录网页。 After dealing with it for several hours I haven't been able to run it. 处理了几个小时后,我无法运行它。 I believe the problem is with the dispatcher, but I've tried a lot of things but with no success... I'll post some code: 我相信问题出在调度程序上,但是我尝试了很多事情,但是都没有成功...我将发布一些代码:

LoginView.jsp (only form shown) LoginView.jsp(仅显示表单)

<form:form method="post" action="doLogin" commandName="login" modelAttribute="login">
        <p> <form:input path="username"/> </p>
        <p> <form:input path="password"/> </p>
        <p class="submit"><input type="submit" name="commit" value="Login"></p>
</form:form>

Login.java is quite easy, as it only contains username and pasword attributes and their setters/getters. Login.java非常简单,因为它仅包含用户名和密码属性及其设置器/获取器。

LoginController.java LoginController.java

@Controller
@RequestMapping("doLogin")
public class LoginController {

    @RequestMapping(method = RequestMethod.GET)
    public String showForm(Map model) {
        Login login = new Login();
        model.put("login", login);
        return "LoginView";
    }

    @RequestMapping(method = RequestMethod.POST)
    public String processForm(Login login, BindingResult result, Map model) {
        String userName = "Admin";
        String password = "root";
        if (result.hasErrors()) {
            return "login";
        }
        login = (Login) model.get("login");
        if (!login.getUsername().equals(userName) || !login.getPassword().equals(password)) {
            return "loginerror";
        }
        model.put("login", login);
        return "loginsuccess";
    }
}

dispatcher-servlet.xml dispatcher-servlet.xml

<mvc:annotation-driven />

    <context:component-scan base-package="spring.blog.src"/>  

    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
    <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>

    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="LoginView.htm">indexController</prop>
            </props>
        </property>
    </bean>

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

    <bean name="indexController" class="org.springframework.web.servlet.mvc.ParameterizableViewController">
        <property name="viewName">
            <value>LoginView</value>
        </property>
    </bean>

I know there something wrong here, but don't know exactly what.... The error thrown by Tomcat is (I'm sorry, some lines are in spanish...) 我知道这里有问题,但是不知道到底是什么...。Tomcat抛出的错误是(对不起,某些行是西班牙语的……)

org.apache.jasper.JasperException: Ha sucedido una excepción al procesar la página JSP /WEB-INF/jsp/LoginView.jsp en línea 26

24:       <form:form method="post" action="doLogin" commandName="login">
25:         <!-- <p><input type="text" name="login" value="" placeholder="Username or Email"></p> -->
26:         <p> <form:input path="username"/> </p>
27:         <!-- <p><input type="password" name="password" value="" placeholder="Password"></p> -->
28:         <p> <form:input path="password"/> </p>
29:         <p class="remember_me">

Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:521)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:424)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)

causa raíz

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'login' available as request attribute
    org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:178)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:198)

I'll apreciate any help !! 我会很感激的!

Your method signature should look like what is below. 您的方法签名应如下所示。 The signature needed the @ModelAttribute annotation. 签名需要@ModelAttribute批注。 The model is not needed as part of the signature. 该模型不需要作为签名的一部分。

@RequestMapping(method = RequestMethod.POST)
public String processForm(@ModelAttribute Login login, BindingResult result) {
    String userName = "Admin";
    String password = "root";
    if (result.hasErrors()) {
        return "login";
    }
    if (!login.getUsername().equals(userName) || !login.getPassword().equals(password)) {
        return "loginerror";
    }
    return "loginsuccess";
}

Also your jsp will just need the command name attribute and not the modelAttribute on the form:form tag. 同样,您的jsp仅需要命令名称属性,而不需要form:form标记上的modelAttribute。

<form:form method="post" action="doLogin" commandName="login">

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM