`

Struts1.1 Action Form的使用

阅读更多

Struts1.1 Action Form的使用

Struts中静态动态ActionForm的使用(一)

登录例子 区别 时间属性 验证机制 在Struts1中,我们经常接触ActionForm为静态ActionForm。静态是指开发者在使用struts框架时必须写对应的ActionForm。 在介绍动态ActionForm使用之前,我们回忆struts常用的ActionForm的方式,以便做对比。 举个完整的登录例子。 第一:配置web.xml [html]view plaincopyprint? action org.apache.struts.action.ActionServlet config /WEB-INF/struts-config.xml action *.do action org.apache.struts.action.ActionServlet config /WEB-INF/struts-config.xml action *.do 第二:新建jsp页面(在login文件夹) [html]view plaincopyprint? <formaction="../login.do"method="get"> 用户名: <inputname="username"type="text">
密 码: <inputname="password"type="text">
<inputtype="submit">

用户名:
密 码:

第三:新建ActionForm [html]view plaincopyprint? 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; } 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 [html]view plaincopyprint? 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"); } } } 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 [html]view plaincopyprint?

<?xmlversion ="1.0"encoding="UTF-8"? >

<struts-config></struts-config>

<!-- 静态form -->

<form-beans><form-beanname></form-beanname></form-beans><action-mappings><actionpath scope="request" name="loginForm" login><forwardname success.jsp login><forwardname login false.jsp></forwardname></forwardname></actionpath></action-mappings>

 

 

<!-- 静态form -->

使用以上常用方式,最大的麻烦就是,几乎为每个表单创建一个ActionForm。导致ActionForm数量多。 而使用动态ActionForm,最大的优点就是,不必手动为每个表单创建ActionForm。 使用动态ActionForm的方式: 上述的第一步、第二步不变、第三步取消、修改第四步、第五步。 为了让方便大家理解,首先修改第五步: [html]view plaincopyprint?

<!-- 动态form -->

<form-beanname="loginForm"type="org.apache.struts.action.DynaActionForm"> <form-propertyname="username"type="java.lang.String"> <form-propertyname="password"type="java.lang.String">

<!-- 动态form -->

第五步中使用form-property指明表单中的属性,其中标签内的name是表单jsp中的控件name值,两者必须相同。type是指控件值的类型。 修改第四步: [html]view plaincopyprint? 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"); } } } 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类型,我们手动开发时间转化类,然后注入到框架中 [html]view plaincopyprint? 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 { @Override public 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 block e.printStackTrace(); } } return dateConvert; } } 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格式。 [html]view plaincopyprint? 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 { @Override public void init() throws ServletException { // TODO Auto-generated method stub ConvertUtils.register(new UtilDateConvert(), Date.class); } } 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 [html]view plaincopyprint? dateConvert com.util.UtilDateServlet 2

分享到:
评论

相关推荐

    一个简单的Myeclipse+Struts开发登陆的JSP例子

    在这个面板中,我们输入文件名称 "userLoginSuccess.jsp",选择模板 "Standard JSP using Struts 1.1",然后点击 "Finish" 按钮。 完成后,struts-config.xml 文件自动被更新,新建的 JSP 文件也被打开了。在这个 ...

    struts配置元素详解

    Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"&gt; &lt;struts-config&gt; &lt;form-beans&gt; &lt;form-bean / &gt; &lt;/form-beans&gt; &lt;action-...

    Struts in Action中文版

    2.6.2. Struts的强项........................................................................................................58 Struts in Action 中文版 Lastest Revised:10/14/2005 10:27:00 AM ...

    Myeclipse开发struts+hibernate+spring新手入门--环境配置---项目开发示例

    改配置可以自动生成,使用eclipse进行自动生成,在建立时,如下图,可直接生成对应的action类和formbean类。 1 2 &lt;!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration ...

    Struts2漏洞检查工具2018版.exe

    要求配置条件比较苛刻,同时,一些特定版本没有看到有沙盒绕过,说以,目前exp只是基于S2-045改写的,所以exp并不是所有版本都能用,正常情况下Struts 2.3.5-2.3.31,Struts 2.5-2.5.10版本可以使用此exp。...

    struts in Action

    1.1. 关于本书...............................................................................................................19 1.1.1. 谁创建了Struts?......................................................

    深入浅出Struts2(附源码)

    本书是广受赞誉的Struts 2优秀教程,它全面而深入地阐述了Struts 2的各个特性,并指导开发人员如何根据遇到的问题对症下药,选择使用最合适的特性。作者处处从实战出发,在丰富的示例中直观地探讨了许多实用的技术,...

    用ssh开发学生信息管理系统

    由于本人的eclipse版本有点老 ,所以用了struts1.1+spring1.2+hibernate3.0+mysql5.0开发的学生信息的CRUD操作 用到了 动态的action 动态的form表单,EL语言,简单的javascript操作 dao用的是spring的事务管理。...

    外文翻译 stus MVC

    • Before passing it to the Action class, Struts will also conduct form state validation by calling the validation() method on UserActionForm. Note: This is not always wise to do. There might be ways ...

    Java求职面试宝典各大公司常考知识点

    4.9. struts中怎么配置form-bean、action、tiles 10 4.10. logic标签有哪几个? 12 4.11. action是单实例还是多实例,为什么? 13 4.12. dispatchAction是用什么技术实现的? 13 4.13. struts2.0的mvc模式?与struts...

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    5.1 Struts标签的使用方法 59 5.2 表单标签的共同属性 60 5.3 form标签 62 5.4 textfield、password、hidden标签 63 5.5 submit标签 65 5.6 reset标签 65 5.7 label标签 66 5.8 head标签 66 5.9 textarea标签 66 ...

    低清版 大型门户网站是这样炼成的.pdf

    2.1.5 struts 2的业务控制器action实现 39 2.1.6 struts 2的处理结果result 45 2.1.7 功能强大的表达式语言ognl 47 2.1.8 struts 2的运行流程分析—helloworld 48 2.1.9 struts 2的异常处理 52 2.2 struts 2...

    eStruts-1.1-开源

    可以在JBOSS或Tomcat中部署自动生成具有所有Action表单,Form Beans,Struts-Config..etc等构成Web应用程序框架的优秀工具,它可以部署在JBOSS或Tomcat中。它可以自动生成Professional JSP页面

    ssh(structs,spring,hibernate)框架中的上传下载

    HibernateDaoSupport封装了HibernateTemplate,而HibernateTemplate封装了Hibernate所提供几乎所有的的数据操作方法,如execute(HibernateCallback action),load(Class entityClass, Serializable id),save(final ...

    《MyEclipse 6 Java 开发中文教程》前10章

    9.4.3 使用新建Form,Action和JSP的向导创建关键组件 176 9.4.4 调整生成的代码 180 9.4.5 发布,运行并测试 183 9.4.6 练习题:如何用JDBC实现登录? 184 9.5 编写Struts整合Hibernate的分页应用 184 9.5.1 分页...

    ARCH4系统开发指南

    1.1 文档编写目的 7 1.2 文档适用范围 7 1.3 修订历史 8 1.4 参考资料 8 2 常用功能处理方式 9 2.1 如何执行条件查询 9 2.1.1 查询示例 9 2.1.2 查询限制 9 2.1.2.1 Like 9 2.1.2.2 In 10 2.1.2.3 Between 10 2.1....

    Java学习笔记-个人整理的

    {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{subsection.1.3.1} {1.4}数据类型}{23}{section.1.4} {1.4.1}整数与浮点数}{23}{...

    Servlets和JSP核心技术 卷2(英文版) 第一部分

    Section 1.1. Purpose of Web Applications Section 1.2. Structure of Web Applications Section 1.3. Registering Web Applications with the Server Section 1.4. Development and Deployment Strategies ...

Global site tag (gtag.js) - Google Analytics