当前位置:首页 > 开发 > 开源软件 > 正文

【Struts2五】Struts2 参数传值

发表于: 2014-08-28   作者:bit1129   来源:转载   浏览:
摘要: Struts2中参数传值的3种情况 1.请求参数绑定到Action的实例字段上 2.Action将值传递到转发的视图上 3.Action将值传递到重定向的视图上   一、请求参数绑定到Action的实例字段上以及Action将值传递到转发的视图上 Struts可以自动将请求URL中的请求参数或者表单提交的参数绑定到Action定义的实例字段上,绑定的规则使用ognl表达式语言

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}

 

 

 

 

【Struts2五】Struts2 参数传值

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
当result类型是dispatcher时服务器跳转采用的是forward方式(相当于只有一个request),一个request
jsp页面跟通常的html传值一样 通常有两种方式 1.form表单传值 2.url方式传值 通常后台接受前端传值
最近,有需求需要传参数到jsp页面,但是不知道该如何传参数到jsp页面!!! 废话少说,贴代码。。。
知识点: struts2中的输入校验 1、action继承ActionSupport 复写validate方法,但是这样子在页面上
这里使用的简单验证是Struts2中最简单的验证. 但是不得不说,struts2的验证系统还是没有JSF的好用.
众所周知,Strut 2的Action类通过属性可以获得所有相关的值,如请求参数、Action配置参数、向其他Act
(转) Strut 2的Action类通过属性可以获得所有相关的值,如请求参数、Action配置参数、向其他Action
1. 数据传输背后机制:ValueStack(值栈) 在这一切的背后,是因为有了ValueStack(值栈)! ValueSta
1:简单的说,值栈是对应每一个请求对象的轻量级的数据存储中心,在这里统一管理着数据,供Action、
(三)Struts2接收参数的方法 Struts2接收参数的方法有3种分别是: 1.用Action的属性接收参数 2.用Doma
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号