控制器代碼如下:
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配置如下:
<!-- 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”(方法名),如下圖
但是經過我反複測試,發現它傳回的視圖是“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中缺少:
<dependency>
<groupid>org.springframework</groupid>
<artifactid>spring-web</artifactid>
<version>3.2.3.release</version>
</dependency>
<dependency>
<artifactid>spring-webmvc</artifactid>
問題5:spring mvc 使用bean接收參數時如何傳參?
比如查詢時,controller 把參數注入到bean中,
@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的呢?
<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 }" />