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)”进行展开,并结合描述中的内容:“这是一本关于Struts很好的书,书中全面地介绍了Struts框架在J2EE中的完美运用...”,来生成相关的知识点。 ### Struts框架简介 ...
### 精通Struts:基于MVC (part 4) #### Struts框架概述 Struts框架是Java Web开发中最著名的MVC(Model-View-Controller)架构之一,它为开发者提供了一种结构化的方式来构建Web应用程序。Struts是Apache软件基金...
Struts2会自动将文件内容封装到`HttpServletRequest`的`Part`对象中,我们可以通过`@RequestParam`注解或Struts2的拦截器来获取。例如: ```java public class UploadAction extends ActionSupport { private Part...
4. ActionServlet创建一个ActionForm对象,并将请求参数填充到ActionForm中。 5. ActionServlet将ActionForm对象传递给Action对象进行业务逻辑处理。 6. Action对象处理完业务逻辑后返回一个表示结果页面的Action...
### 精通Struts:基于MVC (Part 3) #### Struts框架概述 Struts是一个开源的Java Web应用程序框架,它遵循Model-View-Controller(MVC)设计模式。MVC是一种软件架构模式,它将应用程序分为三个主要部分:模型、...
1. **配置Action**: 在Struts2的配置文件(struts.xml)中,我们需要为文件上传的Action添加特殊的配置。例如,启用`params`拦截器,确保文件参数能够正确解析: ```xml ...
在Struts2中,开发者可以利用Action类来处理用户的请求,这些Action类封装了业务逻辑,并且能够返回一个字符串类型的结果,该结果名称与struts.xml文件中定义的result相对应。struts.xml是一个配置文件,用于定义...
3. **ActionForm**:虽然在Struts 2中已不再强制使用,但在早期版本中,ActionForm对象用于封装HTTP请求中的参数,将数据传递给Action进行处理。 4. **视图层**:视图通常由JSP页面构成,Struts会根据Action的返回...
Struts的核心是Struts Action Servlet,它负责接收用户请求,并将请求转发给相应的Action进行处理。 ### Struts在J2EE中的运用 #### 1. **MVC设计模式** MVC是一种常见的设计模式,被广泛应用于Web应用程序的开发...
Struts2会自动处理`multipart/form-data`类型的请求,并将文件内容封装在`ServletActionContext`中,可以通过`ServletActionContext.getRequest().getParts()`来访问上传的文件。例如: ```java public class ...
在"Struts数据库项目开发宝典(part2)"中,我们继续深入探讨如何使用Struts与数据库进行交互,以实现动态、数据驱动的Web应用程序。 首先,`META-INF`目录在Java项目中扮演着重要角色,它是Java存档(JAR)文件的...
Struts会自动将文件内容封装在`Part`对象或者`FileItem`对象中,通过请求参数获取。 4. **文件保存**:在Action中,我们需要实现文件的保存逻辑。这通常包括创建一个保存文件的路径,然后将文件内容写入到这个路径...
要使用Struts2进行文件上传,你需要在Action类中创建一个FormFile类型的属性,并在struts.xml配置文件中声明对应的接收参数。同时,需要在HTML表单中设置`enctype="multipart/form-data"`,以便支持文件上传。 接...
Struts2会将上传的文件内容封装在`HttpServletRequest`对象的`Part`或`FileItem`中,我们可以通过`request`对象获取到这些数据。 3. **临时文件存储**:上传的文件通常首先会被存储在服务器的临时目录下,如`java....
- 在Action中,你可以通过`@RequestParam`注解或者Struts2的`params`拦截器访问到上传的文件,这些文件会被封装成`FileItem`对象。 2. **实现进度条**: - 为了实现进度条,我们需要知道文件上传的进度。由于文件...
2. **文件上传封装**:文件数据被封装成FormData对象,通过Ajax请求发送到服务器。每个文件可能作为单独的part发送,或者通过分块上传策略合并为一个大请求。 3. **Struts2 Action处理**:在后端,Struts2 Action...
1. **Struts 2配置**:如何创建Struts 2的配置文件(struts.xml),配置Action类、结果类型、拦截器栈等。 2. **Action类与结果转发**:理解Action类如何处理请求,如何定义结果转发或重定向。 3. **Spring DI**:...
在Struts2的配置文件(如struts.xml)中,我们需要启用Multipart解析器,这样Struts2才能正确处理文件上传请求。添加以下配置: ```xml <constant name="struts.multipart.parser" value="jakarta"/> ``` 2. *...