天天看点

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 }" />