控制器代码如下:
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 }" />