【Struts2五】Struts2 参数传值
编程技术  /  houtizong 发布于 3年前   73
1.请求参数绑定到Action的实例字段上
2.Action将值传递到转发的视图上
3.Action将值传递到重定向的视图上
Struts可以自动将请求URL中的请求参数或者表单提交的参数绑定到Action定义的实例字段上,绑定的规则使用ognl表达式语言。OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。关于OGNL,在下一篇详细介绍 。
以表单提交为例
1.addUser.jsp
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <title></title> <style type="text/css"> input { display: block; } </style></head><body><!--提交的表单,user.id和user.name作为请求参数传递到了服务器端--><form action="/user/hellons/hi" method="post"> <input type="text" id="userId" name="user.id"/> <input type="text" id="userName" name="user.name"/> <input type="submit"/></form></body></html>
2. struts.xml
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"><struts> <package name="hellopkg" namespace="/hellons" extends="struts-default"> <action name="hi" class="com.tom.actions.HelloWorldAction"> <!--页面内跳转--> <result name="dispatcher" type="dispatcher">/htmls/result.jsp</result> </action> </package></struts>
3. HelloWorldAction
package com.tom.actions;import com.tom.model.User;public class HelloWorldAction { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String execute() { System.out.println(user.getId() + "\t" + user.getName()); return "dispatcher"; }}
4. result.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title></title></head><body> The information is: ${user.id}, ${user.name}</body></html>
1. 在表单中输入100和abc,提交表单后,控制台输出100和abc,同时页面也显示The information is: 100, abc,原因是浏览器客户端提交的表单(GET请求则将参数添加到URL中,POST请求则以请求数据流的方式传输到服务器端,与action中的实例字段(通过setter方法反射)进行参数绑定。
2. 将action请求转发到result.jsp时,Struts通过调用action的字段的getter方法将action中字段的值替换result.jsp中的JSTL表达式的值
3. 在浏览器客户端提交的user.id为100,这是一个字符串,在action中,自动完成了字符串到整型数的转化,这是Struts完成的自动类型转换,Struts支持自定义类型转换
4.在通过POST提交表单的方式时,浏览器自动为请求添加了
Content-Type: ContentTypeapplication/x-www-form-urlencoded ,通过这个内容类型是告诉web服务器,POST的请求数据是通过表单提交的,这些数据将作为请求参数,然后web容器自动将POST中的请求取出,然后将这些请求参数设置
到HttpServletRequest中,可以通过getParameter等方法获取这些请求参数
1. struts.xml文件
<struts> <package name="hellopkg" namespace="/hellons" extends="struts-default"> <action name="hi" class="com.tom.actions.HelloWorldAction"> <!--定义跳转类型为重定向,并且将Action中user.id和user.name作为url参数传递到result.jsp中--> <result name="redirect" type="redirect">/htmls/result.jsp?id=${user.id}&name=${user.name}</result> </action> </package></struts>
2.HelloWorldAction的execute方法
public String execute() { System.out.println(user.getId() + "\t" + user.getName()); //重定向到结果视图 return "redirect"; }
3.result.jsp
<body> <!--param表示从url中获取请求参数--> The information is: ${param.id}, ${param.name}</body>
结论:
1.当用户通过POST请求提交表单,HelloWorldAction将获得用户在表单中输入的信息,user.id=100,user.name=abc
2.Action在重定向时,Struts将Action中的值传道重定向视图的URL上,
<result name="redirect" type="redirect">/htmls/result.jsp?id=${user.id}&name=${user.name}</result>
3.所以用户提交后,将看到页面重定向到http://localhost:8668/user/htmls/result.jsp?id=200&name=abc
问题:
假如重定向视图如下配置,即参数的key分别是user.id和user.name,
<result name="redirect" type="redirect">/htmls/result.jsp?id=${user.id}&user.name=${user.name}</result>
那么在result.jsp中,通过如下方式得不到值,在这种情况下如何传值呢?
${param.user.id}, ${param.user.name}
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成
网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];
文章归档
文章标签
友情链接