【Struts2五】Struts2 参数传值

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}

猜你喜欢

转载自bit1129.iteye.com/blog/2110276
今日推荐