天天看點

spring MVC要注意的地方

控制器代碼如下:

spring MVC要注意的地方

package com.mvc.jn.controller;  

import java.util.map;  

import org.springframework.ui.model;  

import org.springframework.web.bind.annotation.requestmapping;  

import org.springframework.web.bind.annotation.requestmethod;  

import org.springframework.web.bind.annotation.requestparam;  

import org.springframework.web.servlet.modelandview;  

@org.springframework.stereotype.controller  

public class helloworldcontroller {  

    // http://localhost:8088/springmvcannotations/hello2  

    @requestmapping(value = "/hello2", method = requestmethod.get)  

    public string sayhello2(  

            @requestparam(value = "name", required = false) string username,  

            map<string, object> map) {  

        map.put("message1", username);  

        system.out.println("my name:" + username);  

        return "hello22";  

    }  

    // http://localhost:8088/springmvcannotations/hello3  

    @requestmapping(value = "/hello3", method = requestmethod.get)  

    public modelandview sayhello3(  

            @requestparam(value = "name", required = false) string username) {  

        modelandview mav = new modelandview("hello33");  

        mav.getmodel().put("message1", username);  

        return mav;  

    // http://localhost:8088/springmvcannotations/hello44?name=whuang  

    @requestmapping(value = "/hello44", method = requestmethod.get)  

    // 與網上說的不一緻,網上說方法名就是試圖  

    public model hello4(  

            model model) {  

        model.addattribute("message1", username);  

        return model;  

    @requestmapping(value = "/hello555", method = requestmethod.get)  

    public model hello5(string username, model model) {  

}  

 viewresolver配置如下:

spring MVC要注意的地方

<!-- viewresolver -->  

    <bean  

        class="org.springframework.web.servlet.view.internalresourceviewresolver">  

        <property name="viewclass"  

            value="org.springframework.web.servlet.view.jstlview" />  

        <property name="prefix" value="/web-inf/jsp/" />  

        <property name="suffix" value=".jsp" />  

    </bean>  

 問題1:調用控制器中的hello4 方法後會傳回那個視圖?

按照網上的說法,會傳回“hello4”(方法名),如下圖

spring MVC要注意的地方

 但是經過我反複測試,發現它傳回的視圖是“hello44”,即@requestmapping 指定的value。

問題2:通路方法hello5時,必須傳參數username 嗎?

答:不是必須的。

什麼情況下是必須的呢?

當有注解@requestparam(value = "username")時才是必須的,若不傳該參數将報錯.

問題3:spring mvc與hibernate4內建時報錯:no session found for current thread

詳情請參閱我的另一篇部落格:http://hw1287789687.iteye.com/blog/1949852

原因是:pom.xml中缺少:

spring MVC要注意的地方

<dependency>  

            <groupid>org.springframework</groupid>  

            <artifactid>spring-web</artifactid>  

            <version>3.2.3.release</version>  

        </dependency>  

        <dependency>  

            <artifactid>spring-webmvc</artifactid>  

spring MVC要注意的地方

問題5:spring mvc 使用bean接收參數時如何傳參?

比如查詢時,controller 把參數注入到bean中,

spring MVC要注意的地方

@requestmapping(value = "/show")  

    public string show(model model,user user,userview view,httpsession session) throws clonenotsupportedexception {  

        if(!valuewidget.isnullorempty(view.getpageflag())&&view.getpageflag().equals(constant2.pageflag_not_query)){  

            system.out.println("不是查詢");  

            user=(user)session.getattribute("user2");  

            try {  

                beanutils.copyproperties(view, user);  

            } catch (illegalaccessexception e) {  

                e.printstacktrace();  

            } catch (invocationtargetexception e) {  

            }  

        }else{//查詢  

            system.out.println("是查詢");  

            session.setattribute("user2", user);  

        }  

        pageassistant.paging(user,true,view, userdao);  

        model.addattribute("view", view);  

        model.addattribute("currenttime", timehwutil.getcurrenttimestamp().gettime());  

        return "user/show";  

 方法show()的參數user會儲存請求要素,那麼在頁面上是如何編寫表單控件name的呢?

spring MVC要注意的地方

<li>                      

                      <label>使用者名:</label><input type="text"  name="user.username" value="${view.username }"  />  

                  </li>  

                  <li>  

                          <label>真實姓名:</label><input type="text" name="user.name" value="${view.name }" />  

 上述代碼是不對的,應該是:

  <li>                    

                        <label>使用者名:</label><input type="text"  name="username" value="${view.username }"  />

                    </li>

                    <li>

                            <label>真實姓名:</label><input type="text" name="name" value="${view.name }" />