参数绑定与传值

参数绑定与传值
1)功能方法之间的跳转
2)功能方法之间的传值
3)方法和页面之间传值(重点)
4)从页面到功能方法(V-C)

功能方法之间的跳转

方案一:ModelAndView
携带跟路径

可以在字符串里面加入redirect或者forward
mv.setViewName("redirect|forward:/friend/listFri.do");
mv.setViewName("/friend/listFriend.do");

方案二:String

方法返回String 类型return "/friend/listFriend.do"
上面的方法和下面的写法一致:
request.getRequestDispatcher("/friend/listFriend.do")

功能方法之间跳转需要注意点: 路径问题:

绝对路径:以/开始
加跟路径的跳转:
第一次:http://localhost:8080/user/add.do
第二次:http://localhost:8080/user/find.do
不加跟路径:
第一次:http://localhost:8080/user/add.do
第二次:http://localhost:8080/find.do 所以报错

(如果使用了/开始,标示就是绝对路径,会在斜杠的前面加上默认路径http://localhost:8080/再访问
,这个默认路径在工作中有可能是一个域名,或者一个域名+项目名。)

相对路径:不加跟路径,不加斜杠
第一次:http://localhost:8080/user/add.do
第二次:相对的上一个路径就是http://localhost:8080/user/,这个路径有跟路径。
结果:http://localhost:8080/user/find.do

功能方法之间的传值
Request
Session
Cache(分布式缓存)
存:request.setAttribute("friend","测试");内部走过滤器
取:request.getAttribute("friend").toString();
注意: 从定向跳转取不到request范围内的值

某个方法设置值:
@RequestMapping("/addCar.do")
public String addCar(HttpServletRequest request){
System.out.println("添加成功");
request.setAttribute("tag","电动汽车");
//跳转到列表 return "/listCar.do";
}
其他方法接收参数:
@RequestMapping("/listCar.do")
public ModelAndView listCar(HttpServletRequest request) {
Object tag = request.getAttribute("tag");
ModelAndView mv = new ModelAndView();
//有两个能力,第一:传值,第二:跳转页面
mv.addObject("tag",tag);
mv.setViewName("/car.jsp");
return mv;
}

方法和页面之间传值(重点)
(一)从具体的功能方法到页面(从C-V)

方案一:ModelAndView
setViewName设置跳转地址
addObject方法传数据

@RequestMapping("first.do")
public ModelAndView goToFirstPage(HttpServletRequest httpServletRequest){
ModelAndView modelAndView=new ModelAndView();
List<User> userList =new ArrayList<User>();
User user1=new User();
User user2=new User();
user1.setName("张颖豪");
user1.setPass("123");
user2.setPass("12344");
user2.setName("魏雪");
userList.add(user1);
userList.add(user2);
modelAndView.addObject("firstInfo",userList);
modelAndView.setViewName("/first/second.do");
return modelAndView;
}

方案二:Model
Model只能传数据,不能返回具体的页面地址。
返回地址,需要依靠return一个路径。(返回类型需要是String)

    @RequestMapping("/third.do")
    public String goThirdPage(Model model){
    model.addAttribute("third","这是第三个值");
    return "/third.jsp";
    }

(二) 从页面到功能方法(V-C)

方案一:request.getPamerter

在形参中添加HttpServletRequest request参数,通过request接收参数

third.jsp 如下所示:

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/first/third.do" method="post">
用户名:<input type="text" name="username">

密码:<input type="password" name="password">

<input type="submit" value="提交">
</form>
</body>
</html>

third.do 如下所示:
@RequestMapping("/third.do")
public String goThirdPage(Model model,HttpServletRequest request){
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println(username+"\t"+password);
model.addAttribute("third",username+"&"+password);
return "/index.jsp";
}

运行结果如下:


image.png

image.png

方案二:指定具体的类型接受具体的参数

接受整形类型Integer(传递错误不进Action)
接受字符串类型String
接受数组类型Integer[]
只是针对基本类型。

third.jsp 如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/first/four.do" method="post">
用户名:<input type="text" name="username">

密码:<input type="password" name="password">

爱好: <input type="checkbox" name="like" value="ball">篮球
<input type="checkbox" name="like" value="girl">女孩

<input type="submit" value="提交">
</form>

</body>
</html>

four.do 如下:
@RequestMapping("/four.do")
public String goToFour(String username,String password,String[] like,Model model){
System.out.println(username+"\t"+password+"\t"+ Arrays.toString(like));
model.addAttribute("four",username+"&"+password+"&"+Arrays.toString(like));
return "/index.jsp";
}

index.jsp 如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<body>
<h2>Hello World!</h2>
${four}
</body>
</html>

运行结果如下:


image.png
image.png

注意点: 只是针对基本类型。 并且只有我们输入值与实际上的字段类型对应才可以自动转换 ,例如我们输入的字符串 ,但是在 four.do 使用了 数值类型接收值的时候 会直接报错 。

例如: 我们修改接收字段


image.png

运行:


image.png

点击提交之后 :


image.png

注意: 页面上传递的所有文本数据都可以通过String接收。
注意: 复杂对象类型不可以直接接受:如Date类型

方案三:使用封装类型Bean【DTO】来接受多个参数
在形参中让包装类型dto接收参数。DTO中属性名称必须和页面上控件名称一致。

Dto如下所示:

public class Dto {
private String username;
private String password;
private String[] like;

public Dto() {
}

@Override
public String toString() {
    return "Dto{" +
            "username='" + username + '\'' +
            ", password='" + password + '\'' +
            ", like=" + Arrays.toString(like) +
            '}';
}

public Dto(String username, String password, String[] like) {
    this.username = username;
    this.password = password;
    this.like = like;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public String[] getLike() {
    return like;
}

public void setLike(String[] like) {
    this.like = like;
}

}

jsp界面仅仅 Action部分改变请求地址,其他都没有改变。

five.do 如下所示:

@RequestMapping("five.do")
public String goToFive(Dto dto,Model model){
String username = dto.getUsername();
String password = dto.getPassword();
String[] like = dto.getLike();
System.out.println(username+"&"+password+"&"+Arrays.toString(like));
model.addAttribute("five",username+"&"+password+Arrays.toString(like));
return "/index.jsp";
}

测试输出结果:


image.png
image.png

可以发现,一样可以完成。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容