`

Struts2 part 4:Action封装请求参数

 
阅读更多

 

Action接受页面的请求参数,有两种类型模型驱动、属性驱动,可以分为三种方式

 

1、Action自身作为model对象,使用setter封装页面参数(属性驱动)

jsp

	<form action="${pageContext.request.contextPath }/demo05/param1.action" method="post">
		文本<input type="text" name="username" /><br/>
		多选 
		 <input type="checkbox" name="programmes" value="C" />C
		 <input type="checkbox" name="programmes" value="Java" />Java
		<input type="checkbox" name="programmes" value="C++" />C++
		 <br /> 
		 <input type="submit" value="提交" />
	</form>

Action类,为Action类中的属性提供setter(),页面的属性名必须与其对应,这种方式把Action本身看作为model,但不能把Action对象传递到Service、DAO层,所有要对页面参数手动封装到JavaBean中

public class ParamAction1 extends ActionSupport {
	private String username;
	private String[] programmes;

	@Override
	public String execute() throws Exception {
		System.out.println(username);
		System.out.println(Arrays.toString(programmes));
		return NONE;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public void setProgrammes(String[] programmes) {
		this.programmes = programmes;
	}
}

 struts配置

	<package name="demo05" namespace="/demo05" extends="struts-default">
		<action name="param1" class="demo05.ParamAction1">
		</action>
	</package>

 

 2、创建独立的model对象(属性驱动)

jsp,参数的name属性要和action中model对象的名称对应

	<form action="${pageContext.request.contextPath }/demo05/param2.action" method="post">
		文本<input type="text" name="param.username" /><br/>
		多选 
		 <input type="checkbox" name="param.programmes" value="C" />C
		 <input type="checkbox" name="param.programmes" value="Java" />Java
		<input type="checkbox" name="param.programmes" value="C++" />C++
		 <br /> 
		 <input type="submit" value="提交" />
	</form>

 Action,为页面参数创建独立的model对象ParamBean,为其提供getter、setter属性,当封装第一参数时创建ParamBean,需要setter(),封装第二个参数是时需要getter()所以这两个方法都需要

public class ParamAction2 extends ActionSupport {
	private ParamBean param;

	@Override
	public String execute() throws Exception {
		System.out.println(param);
		return NONE;
	}

	public ParamBean getParam() {
		return this.param;
	}

	public void setParam(ParamBean param) {
		this.param = param;
	}

}

这种参数的请求封装有拦截器自动完成

<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>

 model

public class ParamBean {
	private String username;
	private String[] programmes;

	public String getUsername() {
		return this.username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String[] getProgrammes() {
		return this.programmes;
	}

	public void setProgrammes(String[] programmes) {
		this.programmes = programmes;
	}

	@Override
	public String toString() {
		return "ParamBean [username=" + this.username + ", programmes=" + Arrays.toString(this.programmes) + "]";
	}
}

配置

		</action>
			<action name="param2" class="demo05.ParamAction2">
		</action>

  

3、使用ModelDriven接口(模型驱动)

 jsp,那么属性要和model中的属性对应

	<form action="${pageContext.request.contextPath }/demo05/param3.action" method="post">
		文本<input type="text" name="username" /><br/>
		多选 
		 <input type="checkbox" name="programmes" value="C" />C
		 <input type="checkbox" name="programmes" value="Java" />Java
		<input type="checkbox" name="programmes" value="C++" />C++
		 <br /> 
		 <input type="submit" value="提交" />
	</form>

 action,时间ModelDriven接口,该接口的泛型就是model对象,覆写getModel(),model对象需要在Action中手动为其初始化

public class ParamAction3 extends ActionSupport implements ModelDriven<ParamBean> {

	private ParamBean param = new ParamBean();;

	@Override
	public String execute() throws Exception {
		System.out.println(param);
		return NONE;
	}

	@Override
	public ParamBean getModel() {
		return param;
	}

}

这种方式也使用了拦截器

<interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/> 

  

struts配置

	<action name="param3" class="demo05.ParamAction3">
		</action>

  

Action充当model这种方式不会使用,第二种方式更为灵活,可以在Action中创建多个model对象,ModelDriven这种形式接受页面参数时只能使用一种model对象,但可以使用针对ModeDriven的拦截器特性

 

 4、封装数据到Collection类型

jsp

<form action="${pageContext.request.contextPath }/demo05/param4.action" method="post">
		名称<input type="text" name="list[0].name" /><br/>
		价格<input type="text" name="list[0].price" /><br/>
		 <br /> 
		 名称<input type="text" name="list[1].name" /><br/>
		价格<input type="text" name="list[1].price" /><br/>
		 <input type="submit" value="提交" />
	</form>

 Action,ProductBean必须有无参构造方法,页面使用list[index].field这种方式

public class ParamAction4 extends ActionSupport {
	List<ProductBean> list;

	@Override
	public String execute() throws Exception {
		System.out.println(list);
		return NONE;
	}

	public List<ProductBean> getList() {
		return this.list;
	}

	public void setList(List<ProductBean> list) {
		this.list = list;
	}
}

 srtus配置

	<action name="param4" class="demo05.ParamAction4">
		</action>

 

 5、封装数据到Map

jsp,页面封装数据是需要设置key值,使用['key']的方式设置

	<form action="${pageContext.request.contextPath }/demo05/param5.action" method="post">
		名称<input type="text" name="map['one'].name" /><br/>
		价格<input type="text" name="map['one'].price" /><br/>
		 <br /> 
		 名称<input type="text" name="map['two'].name" /><br/>
		价格<input type="text" name="map['two'].price" /><br/>
		 <input type="submit" value="提交" />
	</form>

 Action

public class ParamAction5 extends ActionSupport {
	Map<String, ProductBean> map;

	@Override
	public String execute() throws Exception {
		System.out.println(map);
		return NONE;
	}

	public Map<String, ProductBean> getMap() {
		return this.map;
	}

	public void setMap(Map<String, ProductBean> map) {
		this.map = map;
	}

}

 配置

<action name="param5" class="demo05.ParamAction5">
		</action>

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    精通Struts:基于MVC (part 2)共分5个part

    本文将围绕标题“精通Struts:基于MVC (part 2)”进行展开,并结合描述中的内容:“这是一本关于Struts很好的书,书中全面地介绍了Struts框架在J2EE中的完美运用...”,来生成相关的知识点。 ### Struts框架简介 ...

    精通Struts:基于MVC (part 4)

    ### 精通Struts:基于MVC (part 4) #### Struts框架概述 Struts框架是Java Web开发中最著名的MVC(Model-View-Controller)架构之一,它为开发者提供了一种结构化的方式来构建Web应用程序。Struts是Apache软件基金...

    Struts2上传和下载Action配置

    Struts2会自动将文件内容封装到`HttpServletRequest`的`Part`对象中,我们可以通过`@RequestParam`注解或Struts2的拦截器来获取。例如: ```java public class UploadAction extends ActionSupport { private Part...

    精通Struts:基于MVC (part 1)共分5个part

    4. ActionServlet创建一个ActionForm对象,并将请求参数填充到ActionForm中。 5. ActionServlet将ActionForm对象传递给Action对象进行业务逻辑处理。 6. Action对象处理完业务逻辑后返回一个表示结果页面的Action...

    精通Struts:基于MVC (part 3)共分5个part

    ### 精通Struts:基于MVC (Part 3) #### Struts框架概述 Struts是一个开源的Java Web应用程序框架,它遵循Model-View-Controller(MVC)设计模式。MVC是一种软件架构模式,它将应用程序分为三个主要部分:模型、...

    Struts2文件上传源码

    1. **配置Action**: 在Struts2的配置文件(struts.xml)中,我们需要为文件上传的Action添加特殊的配置。例如,启用`params`拦截器,确保文件参数能够正确解析: ```xml ...

    Struts2知识点总结

    在Struts2中,开发者可以利用Action类来处理用户的请求,这些Action类封装了业务逻辑,并且能够返回一个字符串类型的结果,该结果名称与struts.xml文件中定义的result相对应。struts.xml是一个配置文件,用于定义...

    Struts开发入门与项目实践part2实例源码

    3. **ActionForm**:虽然在Struts 2中已不再强制使用,但在早期版本中,ActionForm对象用于封装HTTP请求中的参数,将数据传递给Action进行处理。 4. **视图层**:视图通常由JSP页面构成,Struts会根据Action的返回...

    精通Struts:基于MVC (part 5)共分5个part

    Struts的核心是Struts Action Servlet,它负责接收用户请求,并将请求转发给相应的Action进行处理。 ### Struts在J2EE中的运用 #### 1. **MVC设计模式** MVC是一种常见的设计模式,被广泛应用于Web应用程序的开发...

    Struts2文件的上传和下载

    Struts2会自动处理`multipart/form-data`类型的请求,并将文件内容封装在`ServletActionContext`中,可以通过`ServletActionContext.getRequest().getParts()`来访问上传的文件。例如: ```java public class ...

    Struts 数据库项目开发宝典(part2)

    在"Struts数据库项目开发宝典(part2)"中,我们继续深入探讨如何使用Struts与数据库进行交互,以实现动态、数据驱动的Web应用程序。 首先,`META-INF`目录在Java项目中扮演着重要角色,它是Java存档(JAR)文件的...

    struts-文件上传

    Struts会自动将文件内容封装在`Part`对象或者`FileItem`对象中,通过请求参数获取。 4. **文件保存**:在Action中,我们需要实现文件的保存逻辑。这通常包括创建一个保存文件的路径,然后将文件内容写入到这个路径...

    struts2和jspServlet上传

    要使用Struts2进行文件上传,你需要在Action类中创建一个FormFile类型的属性,并在struts.xml配置文件中声明对应的接收参数。同时,需要在HTML表单中设置`enctype="multipart/form-data"`,以便支持文件上传。 接...

    struts2文件上传与下载

    Struts2会将上传的文件内容封装在`HttpServletRequest`对象的`Part`或`FileItem`中,我们可以通过`request`对象获取到这些数据。 3. **临时文件存储**:上传的文件通常首先会被存储在服务器的临时目录下,如`java....

    struts2 上传 带有进度条

    - 在Action中,你可以通过`@RequestParam`注解或者Struts2的`params`拦截器访问到上传的文件,这些文件会被封装成`FileItem`对象。 2. **实现进度条**: - 为了实现进度条,我们需要知道文件上传的进度。由于文件...

    extjs struts2 多图片批量上传控件

    2. **文件上传封装**:文件数据被封装成FormData对象,通过Ajax请求发送到服务器。每个文件可能作为单独的part发送,或者通过分块上传策略合并为一个大请求。 3. **Struts2 Action处理**:在后端,Struts2 Action...

    javaweb_part2

    1. **Struts 2配置**:如何创建Struts 2的配置文件(struts.xml),配置Action类、结果类型、拦截器栈等。 2. **Action类与结果转发**:理解Action类如何处理请求,如何定义结果转发或重定向。 3. **Spring DI**:...

    基于struts2的用数组接受多个文件上传+过滤器

    在Struts2的配置文件(如struts.xml)中,我们需要启用Multipart解析器,这样Struts2才能正确处理文件上传请求。添加以下配置: ```xml &lt;constant name="struts.multipart.parser" value="jakarta"/&gt; ``` 2. *...

Global site tag (gtag.js) - Google Analytics