分析:既然知道form为null,说明,能够进入到action里面去,为什么为空呢?可能性最大的一个原因,就是:formbean没有和struts中的actio...
. ---- (1)检索和用户请求匹配的ActionMapping实例,如果不存在就返回请求路径无效信息; (2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到...ActionForm对象中; (3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法; (4)如果ActionForm的validate()方法返回
ActionForm的校验 ActionForm的类全名"> ActionForm类--> ActionForm...ActionForm的校验,如果表单中的数据符不符合规定格式的要求,ActionForm的validate()方法会返回一个ActionError对象,ActionError对象中封装了一个或多个应用发现的校验错误
捕获输入: • Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。...动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存 在的JavaBean(仍然会导致有冗余的javabean)。...Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种 ModelDriven 特性简化了taglib对POJO输入对象的引用。
2.2 使用实体对象简化ActionForm 在进行Struts开发时,我们经常需要编写ActionForm或者配置动态Form来封装表单数据,但是当数据库表增减字段、业务逻辑发生变化时,我们需要修改相关的实体类...、ActionForm和struts-cofig.xml文件,维护工作十分繁琐。...根据以往的经验我们发现:ActionForm和实体类通常非常的相似。例如,在第一章的登录案例中,实体类和ActionForm的代码如示例2.8所示。 ...,即把实体类作为ActionForm的属性来使用。...注意: 在使用实体类作为ActionForm的属性时,必须在ActionForm中实例化实体类,参看示例2.10中的粗体代码。
actionForm, ServletRequest servletRequest, ServletResponse servletResponse) throws java.lang.Exception...{ /* compiled code */ } public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm...actionForm, http.HttpServletRequest httpServletRequest, http.HttpServletResponse httpServletResponse...actionForm, http.HttpServletRequest httpServletRequest, http.HttpServletResponse httpServletResponse...actionForm, http.HttpServletRequest httpServletRequest, http.HttpServletResponse httpServletResponse
示例1.5 import org.apache.struts.action.ActionForm; public class LoginForm extends ActionForm{ private...表1-1-3 元素的主要属性 属性 说明 name 用来设置ActionForm的名字,该名字必须是唯一标识符 type 用来设置ActionForm的完整类名 接下来配置业务逻辑控制器...在这个对话框中通过相应的设置即可完成ActionForm的创建。...图中③处用来设置ActionForm的父类,默认选择第一项org.apache.struts.action.Action .Form。图中④处用来设置ActionForm的完全类名。...把查询出来的管理员信息封装到ActionForm中,可以新建一个ActionForm或者直直接使用AddForm。
"queryDepartment"); } // 部门信息保存 public ActionForward insertDepartment(ActionMapping mapping, ActionForm...operationDepartment"); } } //部门信息删除 public ActionForward deleteDepartment(ActionMapping mapping, ActionForm...this.objectDao = objectDao; } // 培训察看操作 public ActionForward queryTrain(ActionMapping mapping, ActionForm..., form, request, response); } //添加培训操作 public ActionForward saveTrain(ActionMapping mapping, ActionForm...this.objectDao = objectDao; } //薪资删除 public ActionForward deletePay(ActionMapping mapping, ActionForm
通常由一组Actionform Bean表示,ActionForm封装了Http请求的数据的类和对象,它是一个抽象类,每一个输入表单表示它的一个子类,配置文件structs-config.xml中保存了...Http的请求表单与具体的ActionForm类的映射关系。...2.如果ActionForm不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中。 3.根据配置信息决定是否需要表单验证。...如果需要,就调用ActionForm的validate(). 4.如果ActionForm的validate()返回的是null或返回一个不包含ActionMessage的ActionErrors对象,
二、用法: 如果你有两个具有很多相同属性的JavaBean,一个很常见的情况就是Struts里的PO对象(持久对象)和对应的ActionForm。...例如:一个用户注册页面,有一个User实体类和一个UserActionForm,我们一般会在Action里从ActionForm构造一个PO对象,传统的方式是使用类似下面的语句对属性逐个赋值: // 获取...ActionForm 表单数据 UserActionForm uForm = (UserActionForm) form; // 构造一个User对象 User user = new User();...而我们使用 BeanUtils.copyProperties() 方法以后,代码量大大的减少,而且整体程序看着也简洁明朗,代码如下: // 获取 ActionForm 表单数据 UserActionForm
注意:使用继承DispatchAction类的自定义的Action,只会匹配一个action路径,只能共享一个ActionForm,如果加上校验,会产生form表单的参数不一致的情况,会导致校验无法通过...例: public class MyAction extends DispatchAction{ ActionForward add(ActionForm form,HttpServletRequest...他和DispatchAction不同点就是可以去匹配多个action路径,这样也就是结决了共用ActoinForm的校验问题了,多个Action的路径使用同一的自定义Action类,这样就不用共享同一个ActionForm...例: public class MyAction extends MappingDispatchAction{ ActionForward add(ActionForm form,HttpServletRequest...return mapping.findForward("add"); } public ActionForward delete(ActionMapping mapping,ActionForm
ActionServlet,前端控制器 1、根据相应的规则截取Http请求的URL 2、将Http请求分发到相应的Action处理 ActionForm,相当于实体 1、收集表单数据,将表单数据转换成相应的数据类型...class LoginAction extends Action { @Override public ActionForward execute(ActionMapping mapping, ActionForm...HttpServletResponse response) throws Exception { LoginActionForm laf =(LoginActionForm)form; //从ActionForm...; /** * 登录ActionForm,负责表单收集数据 * 表单的属性必须和ActionForm中的get和set的属性一致 * @author liang * */ @SuppressWarnings...("serial") public class LoginActionForm extends ActionForm { private String username; private String
捕获输入: Struts1使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。...动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javaBean)。 ...Struts2也支持ActionForm模式。 表达式语言: Struts1整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合的索引属性的支持很弱。 ...类型转换: Struts1 ActionForm属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。...校验: Struts1 支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。
我们如果有两个具有很多相同属性的JavaBean,一个很常见的情况就是Struts里的PO对象(持久对象)和对应的ActionForm,传统的方式对属性逐个赋值: 如果按照上面那种赋值方式,是非常麻烦的...2、用法 如果有两个具有很多相同属性的JavaBean,一个很常见的情况就是Struts里的PO对象(持久对象)和对应的ActionForm。...例如:一个用户注册页面,有一个User实体类和一个UserActionForm实体类,我们一般会在Action里从ActionForm构造一个PO对象,传统的方式是使用类似下面的语句对属性逐个赋值: /.../ 获取 ActionForm 表单数据 UserActionForm uForm = (UserActionForm) form; // 构造一个User对象 User user = new...而我们使用 BeanUtils.copyProperties() 方法以后,代码量大大的减少,而且整体程序看着也简洁明朗,代码如下: // 获取 ActionForm 表单数据 UserActionForm
Struts2 VS Struts1 在体系结构方面更优秀: 类更少, 更高效: 在 Struts2 中无需使用 “ActionForm” 来封装请求参数....Struts1 升级到 Struts2: Struts1 里使用 ActionServlet 作为控制器; Struts2 使用了一个过滤器作为控制器 Struts1 中每个 HTML 表单都对应一个 ActionForm...Struts1 的验证逻辑编写在 ActionForm 中; Struts2 中的验证逻辑编写在 Action 中.
.*; public class LoginAction extends Action{ public ActionForward execute(ActionMapping mapping, ActionForm... ActionForm的类全名"> ActionForm...是可以自动将表单中的数据封装成对象,当然,一个自定义ActionForm也是要遵守Struts规范的,也就是要继承于ActionForm,并在以上的struts-config.xml进行配置。
action-mappings> //ActionForm...: public class MyActionForm extends ActionForm{ //上传文件的类型为FormFile,注意setter方法对应的name值 private FormFile...public class MyAction extends Action{ @Override public ActionForward execute(ActionMapping mapping, ActionForm...MyDownAction extends DownloadAction{ @Override protected StreamInfo getStreamInfo(ActionMapping mapping, ActionForm
struts-config> 4 增加一个FormBean,类路径为test.UserForm,以下是这个类的内容 package test; import org.apache.struts.action.ActionForm...; public class UserForm extends ActionForm { private String name="lpw";//用户名 private String ps="1111...org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm...public final class RegistAction extends Action { public ActionForward execute(ActionMapping mapping,ActionForm
javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm...class AddAction extends Action { @Override public ActionForward execute(ActionMapping mapping, ActionForm...javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm...DeleteAction extends Action { @Override public ActionForward execute(ActionMapping mapping, ActionForm...UpdateAction extends Action { @Override public ActionForward execute(ActionMapping mapping, ActionForm
request * @param response * @return */ public ActionForward updateIsFinish(ActionMapping mapping, ActionForm...findAll(mapping, form, request, response); } public ActionForward findAll(ActionMapping mapping, ActionForm...request * @param response * @return */ public ActionForward showInsert(ActionMapping mapping, ActionForm...return mapping.findForward("addCourse"); } public ActionForward courseInfo(ActionMapping mapping, ActionForm...@param response * @return ActionForward */ public ActionForward execute(ActionMapping mapping, ActionForm