struts2的请求参数url的写法以及相关struts2与Spring集成时的情况

在使用struts2的时候,我们都知道以前的那种以离散的值作为传递的单位,他们的请求url是这么写的: localhost:8080/test/login?username=hello&password=world

以及其对应的action是这么写的

<span style="font-size:24px;">public class LoginAction extends ActionSupport
{

	private String username ;

	private String password ;
          //下面省略对应的getter  setter方法....

          @Override
	public String execute() throws Exception
	{
		//..........一些业务逻辑代码
		return SUCCESS ;
	}

}</span>

然而事实上可以这样写url: localhost:8080/test/login?user.username=hello&user.password=world

<span style="font-size:24px;">public class LoginAction extends ActionSupport
{
	private User user;
          //下面省略对应的getter  setter方法....

          @Override
	public String execute() throws Exception
	{

                  //..........一些业务逻辑代码
		return SUCCESS ;
	}

}</span>

如果这么写struts2可以自动生成一个User对象 ,而User对象里的属性值是便是来自与请求参数url里的值

localhost:8080/test/login?user.username=hello&user.password=world   (user.username=hello&user.password=world)

在这里值得提醒的是如果相应的User对象里的属性没有对应的参数给他复制,则为null。

如果请求参数的url的值多了比如如下请求url写法:http://localhost:8080/test/login?user.username=hello&user.password=world&user.permission=1    ,会抛出如下异常 :

ognl.NoSuchPropertyException: com.test.entity.User.permission

**********************************************************************************************这是一条分割线

顺便多说几句 如果是Spring集成了struts2的话action可以使用Spring的注解驱动。。。。写法如下:

<span style="font-size:24px;">@Controller("login")
@Scope("prototype")
public class LoginAction extends ActionSupport
{
	private User user;

	public User getUser()
	{
		return user;
	}

	public void setUser(User user)
	{
		this.user = user;
	}

	@Override
	public String execute() throws Exception
	{
		System.out.println(this.user.getUsername());

		System.out.println(this.user.getPassword());

		System.out.print("user object is null ? answer is" );

		System.out.println(this.user == null);

		return SUCCESS ;
	}
}
</span>

可以使用@Controller("login")的注解进行驱动,@Scope("prototype")表示的是该action是单例的。

@Controller里的"login"表示的是struts.xml配置文件里的 class属性。

<span style="font-size:24px;"><action name="login" class="login">

</action></span>

同学们,看到这儿是不是想起了struts2的类型转换器!不过我个人认为struts2的类型转换器还是有必要存在的,因为表单提交时产生的url请求格式是以前的那种,即localhost:8080/test/login?username=hello&password=world

当然了,如果你使用javascript脚本的让其产生的url的请求格式变成下面这种也是可以的。

localhost:8080/test/login?user.username=hello&user.password=world

时间: 2024-10-25 22:28:25

struts2的请求参数url的写法以及相关struts2与Spring集成时的情况的相关文章

JAVAWEB开发之Struts2详解(二)——Action接受请求参数、类型转换器、使用Struts2的输入校验、以及遵守约定规则实现Struts2的零配置

Action接受请求参数 作为MVC框架,必须要负责解析HTTP请求参数,并将其封装到Model对象中 Struts2提供了非常强大的类型转换机制用于请求数据 到 model对象的封装 Struts2和MVC定义关系 StrutsPrepareAndExecuteFilter:控制器 在Struts2中action是什么?(Struts2是一个MVC框架) V:jsp M:action C:action StrutsPrepareAndExecuteFilter Struts2提供了三种数据封装

Struts2(三)struts2处理请求参数及其校验

一.Action处理请求参数 1.Action处理请求参数三种方式 1.1.Action 本身作为model对象,通过成员setter封装 (属性驱动 ) // 页面: 用户名 <input type="text" name="username" /> <br/> // Action : public class RegistAction1 extends ActionSupport { private String username; pu

深入分析JavaWeb 45 -- Struts2封装请求参数与类型转换

作为MVC框架,必须要负责解析HTTP请求参数,并将其封装到Model对象中,Struts2提供了非常强大的类型转换机制用于请求数据 到 model对象的封装. 1.Struts2 提供三种数据封装的方式 Action 本身作为model对象,通过成员setter封装 创建独立model对象,页面通过ognl表达式封装 使用ModelDriven接口,对请求数据进行封装 1. 方式一:在动作类中成员变量给予初始值. 在配置文件中struts.xml中 <package name="p1&q

Struts2中请求参数校验

在Struts2中,请求参数的校验要放在服务端进行.其实我们在做.NET的项目时,使用过EasyUI,EasyUI有各种校验机制,那会是在客服端就直接对输入参数进行了校验.但是我们的Struts框架也是蛮强大的,它本身就给我们提供了非常详细的校验机制. 1.手动校验 使用手动校验,需要一下这么几个条件: ①你的Action要继承ActionSupport接口: ②重写validate接口,如果属性有问题,通过addFieldError(String,String)方法存储错误信息. ③如果向fi

Struts2 -- 获取请求参数

1.直接将action做一个model,就可以得到请求参数. 缺点:需要单独定义javaBean,将action中属性copy到javaBean中.                     优点:简单.                                 这种方式 ,底层是通过反射来实现的. //获取请求参数 属性驱动 第一种,直接将action做为model public class DemoAction extends ActionSupport { private String

请求参数到表述层的类型转换——Struts2

一.简介 说明:HTTP 协议传输数据没有类型的概念,在服务器端是通过 request.getParameter().request.getParameterValue() 方法得到请求参数为 String 或 String[] 类型. 但是这样使用起来不方便,我们希望开源框架能自动的完成类型转换,到使用的时候能直接获取目标类型. 二.Struts2 类型转换 1. Struts2 本身完成了字符串类型到基本数据类型的自动转换,其他情况需要我们定义自己的类型转换器. 2.类型转换失败时的处理方式

struts2与spring集成时,关于class属性及成员bean自动注入的问题

正常来说按照Spring官方配置,在struts2与spring整合时,struts配置文件中class属性指向spring配置的bean id,但是在class指向类路径时,依然能注入service. public class LoginAction extends ActionSupport{ private LoginService loginService; public void setLoginService(LoginService loginService) { System.o

struts2封装请求参数

利用struts2框架进行将页面请求的参数封装有三种方法 第一种(不推荐) 就是动作类和bean中结合在一起,这样方法比较简单,但是很混乱. 代码: package com.example.action; import com.opensymphony.xwork2.ActionSupport; public class Person extends ActionSupport{ private String username; private String password; private

Struts2中请求参数的接收方式和ModelDriven机制及其运用

odelDriven 为什么需要ModelDriven 所谓ModelDriven,意思是直接把实体类当成页面数据的收集对象.比如,有实体类User如下: package cn.com.leadfar.struts2.actions; public class User { private int id; private String username; private String password; private int age; private String address; publi