【Struts2五】Struts2 参数传值

编程技术  /  houtizong 发布于 3年前   73

Struts2中参数传值的3种情况

1.请求参数绑定到Action的实例字段上

2.Action将值传递到转发的视图上

3.Action将值传递到重定向的视图上

 

一、请求参数绑定到Action的实例字段上以及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等方法获取这些请求参数

 

 

二、Action将值传递到重定向的视图上

 

 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}&amp;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}&amp;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}&amp;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];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客