`

动态ActionForm 采用struts上传

阅读更多
	1、动态ActionForm
	* 动态ActionForm是为了避免标准ActionForm膨胀而设计的,使用动态ActionForm可以
	得到标准ActionForm的所有功能
	* 在struts-config.xml文件中定义动态ActionForm,如:
	<form-beans>
		<form-bean name="dynaForm" type="org.apache.struts.action.DynaActionForm">
			<form-property name="name" type="java.lang.String" />
			<form-property name="age" type="java.lang.Integer"/>
		</form-bean>
	</form-beans>
	*在Action中使用动态ActionForm,参见DynaActionFormTestAction.java
		DynaActionForm daf = (DynaActionForm)form;
		String name = (String)daf.get("name");
		Integer age = (Integer)daf.get("age");
		
	动态ActionForm其实是把页面中的html元素的名字和值放到了map中,所以通过get方法可以取出相应的值
	动态ActionForm采用EL表达式的输出方式,${dynabean.map.prop}, 参见:dyan_actionform_success.jsp
	动态Action的验证,通常使用动态验证框架validator
-----------------------------------------------------------------------------------------------
2、采用struts上传
	* 页面中的配置如下:
	  <form action="upload.do" method="post" enctype="multipart/form-data">
		title:<input type="text" name="title"><br>
		file:<input type="file" name="myfile"><br>
		<input type="submit">
	    </form>


	* 在ActionForm中使用FormFile来接收上传的文件,参见:UploadActionForm.java
	private String title;
	private FormFile myfile;

	
	* 在Action中调用FormFile取得上传文件数据,采用流输出,完成上传,参见:UploadTestAction.java
	public class UploadAction extends Action {

		@Override
		public ActionForward execute(ActionMapping mapping, ActionForm form,
				HttpServletRequest request, HttpServletResponse response)
				throws Exception {
			UploadActionForm uf=(UploadActionForm)form;
			String tilte=uf.getTitle();
			FormFile myfile=uf.getMyfile();
			if(myfile!=null){
				FileOutputStream fos=new FileOutputStream("c:\\"+myfile.getFileName());
				fos.write(myfile.getFileData());
				fos.flush();
				fos.close();
				uf.setTitle(myfile.getFileName());
				uf.setFileSize(myfile.getFileSize());
			}
			
			return mapping.findForward("success");
		}
	
	}


	上传文件大小的设置:<controller maxFileSize="300M"/>

	</action-mappings>
		<controller maxFileSize="400M">

		</controller>
		
	</struts-config>
-----------------------------------------------------------------------------------------------
3、测试ActionForm类型的自动转换
	* boolean:yes,1,on,true都会转换成True类型,而且忽略大小写,其他情况转换成false
	* Date类型的转换:
		* 如果是java.sql.Date,页面日期的格式必须为yyyy-mm-dd,才可以转换
		* 如果是java.util.Date,默认情况下struts无法转换
		---------------------------------------------------
	* 自定义转换器的实现步骤
		* 实现converter接口,实现convert方法

		/**
		 * java.util.Date转换器
		 * @author Administrator
		 *
		 */
		public class UtilDateConverter implements Converter {

			public Object convert(Class type, Object value) {
				System.out.println("UtilDateConverter.convert() value=" + value);
				if (value == null) {
					return new Date();
				}
				if (value instanceof Date) {
					return value;
				}
				if (value instanceof String) {
					SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
					try {
						return sdf.parse((String)value);
					} catch (ParseException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
				return null;
			}

		}
		* 将实现的conerter注册,通常情况采用servlet注册

		/**
		 * 注册UitlDateConverter
		 * @author Administrator
		 *
		 */
		public class UtilDateConverterInitWithServlet extends HttpServlet {

			@Override
			public void init() throws ServletException {
				System.out.println("UtilDateConverterInitWithServlet.init()");
				ConvertUtils.register(new UtilDateConverter(), java.util.Date.class);
			}

		}

		* 采用servlet注册需要注意标签的配置,<load-on-startup>10</load-on-startup>
		 
		 <servlet>
			<servlet-name>UtilDateConverterInitWithServlet</servlet-name>
			<servlet-class>com.bjsxt.struts.UtilDateConverterInitWithServlet</servlet-class>
			<load-on-startup>3</load-on-startup>
		  </servlet>
		
		*(也可以采用struts plugin注册)
		
		/**
		 *  注册UitlDateConverter
		 * @author Administrator
		 *
		 */
		public class UtilDateConverterInitWithPlugin implements PlugIn {

			public void destroy() {
			}

			public void init(ActionServlet servlet, ModuleConfig config)
					throws ServletException {
				System.out.println("UtilDateConverterInitWithPlugin.init()");
				ConvertUtils.register(new UtilDateConverter(), java.util.Date.class);
			}
		}

			</action-mappings>		
			<plug-in className="com.bjsxt.struts.UtilDateConverterInitWithPlugin"/>
		</struts-config>

			
		
4、空字段问题
	* 如果html没有写input输入域,jsp脚本接收到的值为null,el表达式则为空串
	* 如果html中存在input输入域,没有输入值,那么jsp脚本和el表达式接收到的都是空串  

Struts对ActionForm的自动搜集过程:
  * 将页面数据放到map中,其中map中的key为页面中的名称,map中的value为页面中的value值
  * 调用BeanUtils.setProperties方法,将map中的值逐个设置到ActionForm实例上,对于ActionForm中的每个属性
    根据类型调用相应的Converter,然后调用相应的convert方法,将相应的字符串转换成ActionForm中指定的类型
    
可以通过BeanUtils.copyProperties(目标对象,源对象)方法进行对象值的复制。
	
	public class AddUserAction extends Action {
	
		public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
			
				//获取从页面表单中提交过来的值
				UserActionForm uaf = (UserActionForm)form;
				
				//创建User实体对象,并将ActionForm中的内容设置到User对象中
		//		User user = new User();
		//		user.setUserId(uaf.getUserId());
		//		user.setUserName(uaf.getUserName());
		//		user.setPassword(uaf.getPassword());
		//		user.setEmail(uaf.getEmail());
		//		user.setContactTel(uaf.getContactTel());
		//		user.setCreateDate(new Date());
				
				User user = new User();
				BeanUtils.copyProperties(user, uaf);
				user.setCreateDate(new Date());
				
				//调用业务逻辑操作
				UserManager.getInstance().addUser(user);
				
				
				return mapping.findForward("success");
			}
		
	}
-------------------------
测试ActionMapping

1、在struts-config.xml文件中每一个<action>标签对应了一个ActionMapping实例

2、理解<action>标签中的forward属性和unknown属性
	只能拦截*.do的未知页面
	<action path="/testunknown"
	    		forward="/unknown.jsp"
	    		unknown="true"
	    ></action>

3、了解一下jstl和struts tag对页面数据的保持
	jstl:-------
	<form action="login.do" method="post">
		用户:<input type="text" name="username" value="${loginForm.username }"><br>
		密码:<input type="password" name="password" value="${loginForm.password }"><br>
		<input type="submit" value="登录">
	</form>
	tag:--------
	<html:form action="login2.do" method="post">
		用户:<html:text property="username"/><br>
		密码:<html:password property="password"/><br>
		<html:submit value="登录"/>
	</html:form>

测试ActionFoward
	* 理解全局和局部ActionFoward
	* redirect
	* struts-config.xml文件是不允许修改的
	* 理解动态ActionForward,动态ActionFoward是可以修改参数的

 

分享到:
评论

相关推荐

    struts 上传 和 smartupload上传

    **Struts上传** Struts是Apache软件基金会下的一个开源项目,它是一个基于MVC(Model-View-Controller)设计模式的Java Web框架。在Struts 1.x版本中,处理文件上传主要依赖于`org.apache.struts.upload.FormFile`...

    struts框架-文件上传下载

    1. Struts1中的文件上传:在Struts1中,文件上传主要依赖于`commons-fileupload`和`commons-io`两个库。首先需要在`struts-config.xml`中配置`action`元素,启用流处理。然后在表单中使用`&lt;html:file&gt;`标签指定上传...

    struts1的文件上传

    Struts1是一个经典的Java Web框架,它在处理用户请求和业务逻辑方面表现出色,尤其是在文件上传功能上。本文将深入探讨Struts1中的文件上传,包括单文件上传、多文件上传,以及解决文件名乱码和重名冲突等问题。 1....

    采用dwr和struts上传进度条

    同时,确保表单中的`file`字段名与ActionForm中的属性名一致,以正确地接收上传文件。 #### 4. 集成进度条样式与脚本 页面中使用的进度条样式通过CSS定义,而进度条的动态更新则依赖于DWR与服务器端的交互。通过...

    struts多附件上传

    2. Struts采用配置驱动的方式,主要配置文件是struts-config.xml,用于定义Action、ActionMapping和结果视图等。 二、多附件上传原理 1. 文件上传是HTTP协议中POST请求的一种特殊形式,通常涉及到multipart/form-...

    struts文图片上传 并存入数据库 在jsp页面显示

    在这个特定的项目中,我们看到的是一个关于如何使用Struts实现图片上传、存储到数据库以及在JSP页面显示的过程。以下是相关的知识点详解: 1. **Struts框架**:Struts是Apache软件基金会的一个开源项目,它提供了...

    struts1.2 图片文件上传(单个/动态多个)

    struts1.2 图片文件上传(单个/动态多个) 单个的采用通用Action 需要ActionForm的,而动态多个上传是采用动态代理类(DispatchAction) 希望对大家有用,另JSP在IE测试通过,JS我就不再处理了!

    采用dwr+ajax和struts开发文件上传进度条

    ### 采用DWR+AJAX和Struts开发文件上传进度条 #### 一、概述 在Web应用开发中,文件上传是一项常见的功能需求。传统的文件上传方式无法提供良好的用户体验,尤其是对于大文件上传时,用户很难了解到上传进度,进而...

    struts框架下的文件上传下载

    在Struts框架中,我们可以使用`org.apache.struts.action.ActionForm`子类来接收表单数据,并利用`org.apache.struts.upload.MultipartRequestHandler`处理多部分请求,这是HTTP协议用于上传文件的格式。 1. **配置...

    Struts1[1].2实现单文件上传讲解.doc

    Struts1.2框架在处理Web应用程序中的文件上传功能时提供了便利...同时,随着技术的发展,Struts1逐渐被淘汰,现在的开发更多采用Struts2或者其他现代的MVC框架,如Spring MVC,它们提供了更强大且安全的文件上传支持。

    struts2实现登陆注册+服务器校验+上传下载+简单的留言讨论区+分页显示

    Struts2可以通过Action类来处理用户提交的请求,配合ActionForm或Pojo类来接收和验证用户输入的数据。同时,可以利用Session或Cookie来管理用户的登录状态。 3. **服务器校验**:服务器端验证是确保用户输入数据...

    struts编程思想初探

    - **struts-upload.jar**:用于文件上传的功能。 ##### 3.2 Struts Framework的工作原理和组件 - **3.2.1 StrutsActionServlet** - 初始化Struts框架。 - 负责处理HTTP请求,并将其转发给相应的Action对象。 - ...

    Struts 在行动 (最新中文版)

    接着,书中将详述如何配置Struts框架,包括struts-config.xml文件的编写,以及ActionForm、Action、Interceptor等核心组件的使用。读者还将了解到如何处理HTTP请求,以及如何与视图层(如JSP)进行交互。 在JSP部分...

    Struts中的上传及下载

    ### Struts中的上传及下载知识点解析 #### 一、知识点概览 在Struts框架中,上传和下载功能是常用且重要的组成部分。本篇将基于提供的文件内容来深入讲解Struts框架下的文件上传与下载机制。 #### 二、知识点详解...

    struts1和struts2 帮助文档

    Struts2则是在Struts1的基础上进行了大幅改进和扩展,它采用了拦截器(Interceptor)机制,使得业务逻辑处理更加灵活。Struts2的核心是Front Controller(StrutsPrepareAndExecuteFilter),它负责拦截所有请求并...

    Struts2基础面试题

    - **Struts2的核心控制器**:Struts2采用了不同的架构设计,不再依赖于Servlet作为核心控制器。Struts2的核心控制器实际上是由一系列过滤器(Filter)组成的,其中最核心的是`StrutsPrepareAndExecuteFilter`。这意味...

    struts从入门到精通.doc

    - **MVC架构**:Struts采用经典的MVC架构,将一个应用程序分为模型(Model)、视图(View)和控制器(Controller)三部分。模型负责存储数据并提供业务逻辑;视图负责数据展示;控制器则作为两者之间的桥梁,接收...

Global site tag (gtag.js) - Google Analytics