`

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

分享到:
评论

相关推荐

    struts1.1源代码

    struts-config.xml 是 Struts 应用的配置文件,定义了 Action、Form Bean、ActionMapping 和其他组件的配置信息。它是 Struts 初始化的重要依据。 通过阅读 Struts 1.1 的源代码,我们可以更深入地理解其内部工作...

    Struts 1.1 API.zip

    6. **JSP标签库**:Struts 1.1提供了一套丰富的JSP标签库,如`&lt;s:form&gt;`, `&lt;s:textfield&gt;`, `&lt;s:submit&gt;`等,使得开发者能够更简洁地创建动态页面,减少Java脚本的使用。 7. **国际化和本地化**:Struts 1.1支持...

    struts1.1.jar

    在"struts1.1.jar"这个文件中,包含了Struts 1.1框架的核心组件和必要的类库,这些组件包括: 1. **ActionServlet**:这是Struts的核心控制器,负责处理HTTP请求并调度到相应的Action。它通过配置在struts-config....

    struts1.1 jar包

    Struts框架通过Action类、Form Bean和JSP页面实现了这一模式。 2. **ActionServlet**:这是Struts的核心组件,作为一个Servlet,它负责接收HTTP请求,解析请求参数,并根据配置信息转发到相应的Action。Action...

    struts1.1_EJB小例子

    这个"struts1.1_EJB小例子"很可能是演示如何在Struts 1.1框架下集成和使用EJB。具体实现可能包括创建一个Action,该Action通过调用EJB来处理业务逻辑,然后返回结果给客户端。通过分析源码,我们可以学习到如何在Web...

    struts1.1+ejb模拟项目

    1. **Struts1.1配置**:学习如何配置struts-config.xml文件,定义Action Mapping、Form Beans、Actions以及结果视图。 2. **EJB创建与部署**:理解如何创建和配置Entity Beans、Session Beans,以及在应用程序...

    深入Struts 1.1

    在设计模式上,Struts 1.1鼓励开发者将业务逻辑放入Action类,而数据校验和业务实体(form beans)则封装在ActionForm中。这种分离提高了代码的可重用性和可测试性。Action类通常只包含execute方法,专注于流程控制...

    Struts 1.1 API 英文版

    10. **异常处理**: Struts 1.1提供了处理应用程序异常的机制,可以通过配置文件定义全局或特定Action的异常处理策略。 通过阅读Struts 1.1 API的英文版,开发者能够深入理解框架的工作原理,有效地利用其功能,提高...

    jakarta-struts-1.1.zip_jakarta-Struts-1_jakarta-struts 1_jakarta

    Jakarta Struts的核心概念包括Action、Form Beans、Configurations、Tiles、JSP Tags等。Action是处理用户请求的核心组件,它负责将HTTP请求映射到业务逻辑,并返回一个表示结果的ActionForward。Form Beans则用于在...

    struts1.1api

    5. **.struts-config.xml**: 这是Struts配置文件,包含ActionServlet、Action、ActionMapping、Form Bean以及其他组件的配置信息。 6. **Tiles**: Struts 1.1引入了Tiles框架,它允许开发者创建可重用的页面布局,...

    Repo1:Struts1.1 检查目的存储库

    2. **配置文件**:`struts-config.xml`是Struts1.1的主要配置文件,包含了Action、Form Bean、DataSource等定义,用于告诉框架如何处理请求和展示响应。 3. **Action**:Action类是处理用户请求的业务逻辑组件,每...

    精通Struts1.1

    《精通Struts1.1》是一本专注于Java Web开发领域中的经典著作,主要围绕着Struts 1.1框架展开,旨在帮助读者深入理解和熟练应用这个基于Model-View-Controller(MVC)设计模式的开源框架。Struts是Apache软件基金会...

    struts1—jar

    - JSP页面,展示了如何使用Struts1标签库来构建用户界面。 - 配置文件,如struts-config.xml,展示了如何配置Struts1框架。 - 相关的资源文件,如图片、样式表或JavaScript文件,它们与用户界面交互有关。 - 测试...

    struts1_1api

    在Struts 1.1版本中,包含了许多核心组件,如Action、Form Beans、Dispatchers、Tiles等,这些都对开发者构建Web应用至关重要。 1. **Action**: Action是Struts的核心组件,负责处理HTTP请求并调用业务逻辑。开发者...

    eclipse搭建struts1.2

    在IT行业中,开发Web应用程序时,常常会使用到MVC(Model-View-Controller)设计模式,而Struts框架就是一款基于Java平台的MVC框架,尤其在早期Web开发中非常流行。本教程将详细讲解如何在Eclipse环境中搭建一个基础...

    struts1源代码

    10. **Struts标签库**:Struts1提供了丰富的JSP标签,如&lt;s:form&gt;、等,简化了视图层的开发。它们是基于JSTL的,通过ActionForm和ValueStack与模型数据进行交互。 深入学习Struts1的源代码,可以让我们更好地理解MVC...

    strutsAPI

    这个"Struts 1.1 API"的CHM文件很可能包含了该版本的所有类、方法和其他编程元素的详细文档,对学习和使用Struts框架非常有帮助。 在Struts框架中,以下几个关键组件和概念值得深入理解: 1. **ActionServlet**: ...

    struts-2.2.1.1完整jar包

    通过下载并使用Struts 2.2.1.1的完整jar包,开发者可以构建出符合企业级标准的Web应用程序,同时享受该版本提供的增强功能和性能改进。在使用过程中,查阅官方文档、社区论坛和更新日志,可以帮助开发者更好地理解和...

    Struts In Action

    首先,"commons-scaffold.zip"包含了Struts框架中的公共模版或基础结构,它可能包含了一些常用的Action类、Form Bean、以及与业务逻辑交互的DAO(数据访问对象)和VO(值对象)。 Commons Scaffold是Struts中用于...

Global site tag (gtag.js) - Google Analytics