Struts中静态动态ActionForm的使用(一)
来源:互联网 发布:下载流星网络电视 编辑:程序博客网 时间:2024/05/16 10:48
目录
登录例子
区别
时间属性
验证机制
在Struts1中,我们经常接触ActionForm为静态ActionForm。静态是指开发者在使用struts框架时必须写对应的ActionForm。
在介绍动态ActionForm使用之前,我们回忆struts常用的ActionForm的方式,以便做对比。
举个完整的登录例子。
第一:配置web.xml
<servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param></servlet><servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern></servlet-mapping>
第二:新建jsp页面(在login文件夹)
<form action="../login.do" method="get"> 用户名: <input name="username" type="text"><br> 密 码: <input name="password" type="text"><br> <input type="submit" > </form>
第三:新建ActionForm
package com.login;import java.util.Date;import javax.servlet.http.HttpServletRequest;public class LoginForm extends ActionForm{ public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;} private String username; private String password;}
第四:新建Action
package com.login;import java.util.Date;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.action.DynaActionForm;public class LoginAction extends Action {public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { LoginForm loginForm=(LoginForm)form; boolean flag=false; if("admin".equals(loginForm.getUsername())&&"admin".equals(loginForm.getPassword())){ flag=true; } request.setAttribute("username",loginForm.getUsername()); if(flag) { return mapping.findForward("success"); }else{ return mapping.findForward("false"); } }}
第五:配置struts核心配置文件struts-config.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"><struts-config><!-- 静态form --><form-beans><form-bean name="loginForm" type="com.login.LoginForm"></form-bean></form-beans><action-mappings><action path="/login" type="com.login.LoginAction" name="loginForm"scope="request"><forward name="success" path="/login/success.jsp"></forward><forward name="false" path="/login/false.jsp"></forward></action></action-mappings></struts-config>
使用以上常用方式,最大的麻烦就是,几乎为每个表单创建一个ActionForm。导致ActionForm数量多。
而使用动态ActionForm,最大的优点就是,不必手动为每个表单创建ActionForm。
使用动态ActionForm的方式:
上述的第一步、第二步不变、第三步取消、修改第四步、第五步。
为了让方便大家理解,首先修改第五步:
<!-- 动态form --><form-beans><form-bean name="loginForm" type="org.apache.struts.action.DynaActionForm"> <form-property name="username" type="java.lang.String"></form-property> <form-property name="password" type="java.lang.String"></form-property></form-bean></form-beans>
第五步中使用form-property指明表单中的属性,其中标签内的name是表单jsp中的控件name值,两者必须相同。type是指控件值的类型。
修改第四步:
package com.login;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.action.DynaActionForm;public class LoginAction extends Action {public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {DynaActionForm loginForm=(DynaActionForm)form; String username=(String)loginForm.get("username"); String password=(String)loginForm.get("password"); boolean flag=false; if("admin".equals(username)&&"admin".equals(password)){ flag=true; } request.setAttribute("username",username); if(flag) { return mapping.findForward("success"); }else { return mapping.findForward("false"); }}}
静态ActionForm方式,使用get/set方法,而动态ActionForm方式,使用的map的get key方式。其中的key就是标签name值。
使用动态ActionForm的另一个优点是,若是更改表单和ActionForm时,不需要重新部署。而使用静态ActionForm时,则需要修改ActionForm.java文件,还必须重新部署。
但是使用动态ActionForm,配置文件太长。不如静态ActionForm清晰明了。
使用时间属性
动态ActionForm使用时间类型
第一种方式:使用java.sql.Date类型。但是界面必须是yyyy-MM-dd这种形式。
第二种方式:使用String类型。但是在后台自己转换。
静态ActionForm使用时间类型
ActionForm有自行匹配,检验的功能。自动把表单上的数据转化成ActionForm相应的数据类型。但是默认的java.sql.Date类型,但是对于java.util.Date类型则不能自动转化。
所以为了使用java.util.Date类型,我们手动开发时间转化类,然后注入到框架中
package com.util;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import org.apache.commons.beanutils.Converter;public class UtilDateConvert implements Converter {@Overridepublic Object convert(Class type, Object value) {if(value==null){return value;}if(value instanceof Date){return value;}Date dateConvert=null;if(value instanceof String){SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd");try {dateConvert =(Date)sdf.parse((String)value);} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return dateConvert;}}
其中转化类中定义什么格式,界面输入什么格式。如上文中,定义yyyy/MM/dd 界面输入1988/10/11.若输入1988-10-11格式,则提示转化错误。另外转化类中可以定义yyyy-MM-dd格式。
package com.util; import java.util.Date;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import org.apache.commons.beanutils.ConvertUtils;public class UtilDateServlet extends HttpServlet {@Overridepublic void init() throws ServletException {// TODO Auto-generated method stubConvertUtils.register(new UtilDateConvert(), Date.class);}}
在配置文件中配置servlet
<servlet> <servlet-name>dateConvert</servlet-name> <servlet-class>com.util.UtilDateServlet</servlet-class> <load-on-startup>2</load-on-startup></servlet>
ps:登录demo,静态actionform,其中包括时间属性以及时间转换器的demo已经上传。点击我下载
- Struts中静态动态ActionForm的使用(一)
- struts静态动态ActionForm使用(二)—验证
- Struts 动态actionForm的使用
- Struts中动态ActionForm与静态ActionForm有什么区别?
- Struts表单处理器ActionForm(静态动态)
- Struts中动态ActionForm与静态ActionForm有什么区别?_
- Struts的动态ActionForm(DynaActionForm)
- 动态ActionForm的使用
- 动态ActionForm的使用
- Struts旅程(三)Struts表单处理器ActionForm(静态动态)
- Struts旅程(三)Struts表单处理器ActionForm(静态动态)
- Struts1 中 什么是动态ActionForm 与静态ActionForm
- Struts使用中ActionForm get set方法的小问题
- Struts中ActionForm的使用及传参
- (Struts)动态ActionForm(转)
- Struts中的动态ActionForm
- 06-struts-动态ActionForm
- Struts---- 动态ActionForm
- Linux开机启动(bootstrap)
- [curl库] libcurl初步体验
- Linux文件管理相关命令
- Linux命令行与命令
- 经典排序算法的汇总之快速排序
- Struts中静态动态ActionForm的使用(一)
- Linux文件管理背景知识
- 如何提高自己的 Java 编程技能
- [NOI2005]智慧珠游戏
- OA之权限管理需求总结
- Linux文本流
- Linux架构
- Linux进程基础
- php的基本语法