springmvc传值问题

我根据spring入门中的代码,建立了一个简单的登录模块,但是,在学习展示层时候遇到了一个奇怪的问题,在开始login.jsp中,只有密码中type="password"的值能够传给后端,用户名传的数值为null。
我的问题是:

  1. 为什么值传不进去?
  2. loginCommand是怎么取到传进去的值的?

我的配置如下:
web层,LoginController类

 @RequestMapping(value = "/index.html")
    public String loginPage() {
        return "login";
    }

    @RequestMapping(value = "/loginCheck.html")
    public ModelAndView loginCheck(HttpServletRequest request, LoginCommand loginCommand) {
    //loginCommand只有 userName 和 password 两个属性
        System.out.println("userName: " + loginCommand.getUserName());
        System.out.println("password: " + loginCommand.getPassword());
        boolean isValidUser = userService.hasMatcherUser(loginCommand.getUserName(),
                loginCommand.getPassword());

        System.out.println(isValidUser);
        if (!isValidUser) {
            return new ModelAndView("error", "error", "用户名或密码错误。");
        } else {
            User user = userService.findUserByUserName(loginCommand
                    .getUserName());
            user.setLastIp(request.getLocalAddr());
            user.setLastVisit(new Date());
            userService.loginSuccess(user);
            request.getSession().setAttribute("user", user);
            return new ModelAndView("success");
        }
    }

web.xml

 <!--①从类路径下加载Spring配置文件,classpath关键字特指类路径下加载-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:smart-context.xml</param-value>
  </context-param>
  <!--②负责启动Spring容器的监听器,它将引用①处的上下文参数获得Spring配置文件的地址-->
  <listener>
    <listener-class>
      org.springframework.web.context.ContextLoaderListener
    </listener-class>
  </listener>
  <!--Spring MVC的主控Servlet-->
  <servlet>
    <servlet-name>smart</servlet-name>
    <servlet-class>
      org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>3</load-on-startup>
  </servlet>
  <!--③Spring MVC处理的URL-->
  <servlet-mapping>
    <servlet-name>smart</servlet-name>
    <url-pattern>*.html</url-pattern>
  </servlet-mapping>

smart-servlet.xml

    <!-- 扫描web包,应用Spring的注解 -->
<context:component-scan base-package="com.smart.web"/>
        <!-- ①②配置视图解析器,将ModelAndView及字符串解析为具体的页面 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:viewClass="org.springframework.web.servlet.view.JstlView"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" />
 </beans>
阅读 2.4k
1 个回答

你要看一下你的页面参数名称和实体bean中字段名称是否一致,框架只是帮你解析你的http请求参数,映射到你设置的对象里了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题