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}&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}
相关推荐
2. **发送数据**:在请求中,可以通过`data`参数发送键值对数据。 3. **接收响应**:在请求成功时,通过`onreadystatechange`或`success`回调函数处理服务器返回的数据。 ### 三、Struts2与AJAX整合 1. **配置...
当用户提交表单时,Struts2框架会自动将请求参数映射到对应的Action属性,然后在Action执行方法中使用这些值进行业务处理。这种方式简单直观,适合简单的数据传递。 2. **ValueStack和Ognl表达式** ValueStack是...
总之,Struts 2 中处理中文汉字传值的关键在于理解和正确使用字符编码,包括设置页面编码、响应编码、URL编码和Action中的解码步骤。确保每个环节都与UTF-8编码兼容,可以避免中文字符的乱码问题。在实际开发中,还...
### Struts2页面取值与标签使用详解 #### 引言 在Web应用开发中,Struts2框架因其强大的功能和灵活的配置受到广大开发者青睐。本文将深度解析Struts2框架中页面取值的多种方式及核心标签的使用技巧,帮助开发者更...
### Struts2常用标签及其应用详解 #### 一、引言 Struts2是一个基于MVC模式的开源Java Web框架,它提供了丰富的标签库来帮助开发者更高效地进行Web应用程序的开发。这些标签不仅简化了页面逻辑的编写,还提高了代码...
4. **传值去页面**:Struts2支持将Action中的数据传递给JSP页面进行显示。这可以通过`ModelDriven`接口、`ActionSupport`类的`getFieldErrors()`方法,或者直接在JSP中使用OGNL访问Action属性来实现。此外,`...
这个项目案例和视频教程主要针对初学者,旨在深入理解如何使用Struts2的ModelDriven机制来接收和传递参数。 ModelDriven接口是Struts2提供的一种设计模式,它的核心思想是将业务模型与Action类紧密结合。通过实现...
Struts2是一个强大的MVC(Model-View-Controller)框架,它被广泛应用于Java Web开发中,以提高开发效率和代码可维护性。本笔记将深入探讨Struts2的核心概念、配置方法以及如何通过Action类与视图进行交互。 1. **...
### Struts2框架中Action间传值方法详解 在Struts2框架中,Action类是处理用户请求的核心组件,它们负责执行具体的业务逻辑,并决定视图的转向。在某些情况下,我们可能需要在一个Action处理完成后将某些数据传递给...
Struts2 是一款基于 MVC 设计模式的 Java Web 开发框架,它简化了Java应用程序的开发流程,尤其是在处理表单和页面展示方面。Struts2 提供了一系列丰富的标签库,使得开发者能够方便地在 JSP 页面中实现各种功能。...
Struts2是一个流行的Java Web框架,它为开发者提供了一种组织和管理应用程序逻辑的方式。在Struts2中,Action是核心组件,负责处理用户请求并返回相应的结果。本篇文章将详细探讨在Struts2.x中两个Action之间传递值...
在Struts2中,`<input>`标签被广泛用于从前端页面向后端Action传递参数。例如: ```html ``` 这里,`name`属性定义了参数名,这要求在Action中需定义相应的属性并提供SET/GET方法。如果Action中没有定义该属性,...
请求参数可以通过ActionForm对象或者直接在Action类的方法参数中获取,然后进行必要的业务处理。 弹出窗口父子窗口传值主要指的是在Web应用中打开新窗口或弹出对话框时,两个窗口之间数据的交换。在JavaScript中,...
1. **添加STRUTS库**:确保你的项目已经包含了STRUTS的依赖库,包括struts2-core、struts2-json-plugin等。这些库可以在Maven仓库或Apache官方网站上找到。 2. **配置struts.xml**:在项目的配置文件struts.xml中,...
Struts2是一个强大的MVC框架,用于构建Java Web应用程序。它的核心特性之一是提供了丰富的标签库,使得开发者能够更方便地在JSP页面中处理业务逻辑和展示数据。下面我们将深入探讨Struts2的页面开发中常用的标签及其...
Struts2是一个强大的MVC框架,它提供了丰富的标签库,简化了JSP页面的开发。以下是对Struts2中常用标签的详细说明: 1. **传值到Action**: - `<input>`标签:用于创建HTML输入字段,通过`name`属性指定在Action中...
Struts2ParameterPostMethod_common: 关于Struts普通传值的应用 Struts2ParameterPostMethod_packagebybean: 关于Struts封装参数传递的应用 Struts2SQLConnection: 关于Struts数据库链接的应用 Struts2Verifier: ...
今天,我们将讨论如何解决URL传值到Action乱码问题,特别是在Struts2框架中。 乱码问题的原因 乱码问题的原因是因为URL传值时,浏览器和服务器之间的编码方式不同所致。在大多数情况下,浏览器使用UTF-8编码,而...
在Java Web开发中,页面传值是不可或缺的一部分,主要用于用户在网页上填写信息后提交...在实际项目中,通常会结合Model-View-Controller(MVC)架构,使用框架如Spring MVC或Struts来更高效地管理页面传值和业务逻辑。
#### 五、Struts配置 Struts框架需要配置相关的`Action`和表单bean,如下所示: ```xml <struts-config> <form-bean name="loginForm" type="org.viman.struts.form.LoginForm"/> ...