鍍金池/ 問答/Java  C  Linux/ springmvc傳值問題

springmvc傳值問題

我根據(jù)spring入門中的代碼,建立了一個簡單的登錄模塊,但是,在學(xué)習(xí)展示層時候遇到了一個奇怪的問題,在開始login.jsp中,只有密碼中type="password"的值能夠傳給后端,用戶名傳的數(shù)值為null。
我的問題是:

  1. 為什么值傳不進(jìn)去?
  2. loginCommand是怎么取到傳進(jìn)去的值的?

我的配置如下:
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關(guān)鍵字特指類路徑下加載-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:smart-context.xml</param-value>
  </context-param>
  <!--②負(fù)責(zé)啟動Spring容器的監(jiān)聽器,它將引用①處的上下文參數(shù)獲得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包,應(yīng)用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>
回答
編輯回答
醉淸風(fēng)

你要看一下你的頁面參數(shù)名稱和實體bean中字段名稱是否一致,框架只是幫你解析你的http請求參數(shù),映射到你設(shè)置的對象里了。

2017年9月20日 23:39