Struts的视图组件:
Struts框架中的视图组件主要包括:
JSP页面。
ActionForm类 。
Struts自定义标签。
消息资源。
其中,ActionForm类是Struts框架的核心组件之一,是Struts的关键视图组件。在这篇文章中,将讨论ActionForm类及其作用。
ActionForm的作用机理:
ActionForm本质上是一种JavaBean,是专门用来传递表单数据的DTD(Data Transfer Object,数据传递对象)。它包括用于表单数据验证的validate()方法和用于数据复位的reset()方法。
Struts框架利用ActionForm对象来临时存放视图页面中的表单数据。例如,一个登录页面会有一个用户名输入框和一个密码输入框,以及用来提交登录请求的按扭。当用户提交登录请求后,Struts将 用户名和密码两个输入域的数据自动填充到相应的ActionForm对象中,然后控制层可以从该ActionForm对象中读取用户输入的表单数据,也可以把来自模型层的数据存放到ActionForm中,然后返回给视图显示。
ActionForm有(request)和(session)两种作用域(scope)。如果ActionForm的作用域设定为request,ActionForm实例将保存在request对象中,像其他保存在request对象中的属性一样,仅在当前请求范围内有效。如果ActionForm的作用域设定为session,那么ActionForm实例将被保存在session对象中,同一个ActionForm实例在整个HTTP会话中有效。
在Struts框架 中,ActionForm的作用机理如下图:
当验证ActionForm时,如果检测到一个或多个验证错误,Struts框架会把错误转发回配置文件struts-config.xml中元素的input属性所指定的输入页面。
ActionForm的使用方法:
1.创建ActionForm
可以扩展Struts软件包的ActionForm类来创建具体的ActionForm。Struts软件包中的ActionForm类本身 是一个抽象类,在扩展的时候,为每一个要从HTML表单中捕获的输入域定义一个属性,使表单输入域与ActionForm属性一一对应,以使ActionForm能够捕获需要的表单输入。定义了具体的属性,就可以覆盖父类 的validate()和reset()方法,来实现具体的ActionForm验证规则和初始化方法。
下面是一个小例子
/**//*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package struts.form;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
/** *//**
* Struts框架的ActionForm对象,它可用来在用户和业务层之间舆用户的输入数据。
* ActionForm也叫FormBean.Struts框架会自动从请求中惧输入数据,再将 这些
* 数据交给一个使用FormBean的Action对象,接着FormBean可以再交给业务层
*/
public class LoginHandlerForm extends ActionForm
{
/**//*
* Generated fields
*/
/** *//** userName property */
private String userName;
/** *//** userPwd property */
private String userPwd;
//验证方法,主要用于验证视图上的数据,例如非空之类,
//如果要进行业务验证,则应该在Action中进行!
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request)
{
return null;
}
//初始化首先调用的方法
public void reset(ActionMapping mapping, HttpServletRequest request)
{
// TODO Auto-generated method stub
}
public String getUserName()
{
return userName;
}
public void setUserName(String userName)
{
this.userName = userName;
}
public String getUserPwd()
{
return userPwd;
}
public void setUserPwd(String userPwd)
{
this.userPwd = userPwd;
}
}
在以上的loginActionForm中,validate()方法和reset()方法是ActionForm中两种可以覆盖的方法。validate()方法中定义具体的ActionForm验证规则。
运行一个JSP时,服务器端执行哪些组件和方法,可执行哪些自定义方法。
1、对于一个JSP请求,服务器端自动调用ActionServlet、ActionMapping、ActionForm、Action、ActionForward等组件和运行它们相应的方法。
ActionServlet的方法主要有:process(),InitApplication(),InitMapping(),InitDigester(),InitOther();
ActionServlet提供了公共方法,可以被Action类实例使用。本节我们简要讨论一些方法:关于ActionServlet方法的更详细信息,请参数在http://jakarta.apache.org/struts中的Struts文档。
ActionServlet有允许我们增加或删除ActionForm beans、ActionForwards和ActionMappings的方法。这些方法的基本形式如下所示:
public void addFormBean(ActionFormBean formBean)
public void removeBean(ActionFormBean formBean)
public void addForward(ActionForward forward)
public void removeForward(ActionForward formward)
public void addMapping(ActionMapping mapping)
public void removeMapping(ActionMapping mapping)
每个定义显示了方法的范围(都是public)、方法返回的对象(都为void)以及方法的参数,下列方法根据名字找到这些对象:
public ActionFormBean findFormBean(String name)
public ActionForward findForward(String name)
public ActionMapping findMapping(String name)
接下来的两个方法用于处理数据源:
public void addDataSource(String key,DataSource ds)
public Datasource findDataSource(String key) – trturns a DataSource instance
findDataSource()方法用名字查找数据源。数据源可能是在Struts配置文件中静态定义的,也可能是用addDataSource()方法动态增加的。
最后,我们可以用下列的destroy()方法很优雅地关闭ActionServlet,并用reload()方法从Struts配置文件中重新装入信息到ActionServlet。
ActionForm是抽象类,用于定义用户Bean,在这里,用户可自定义各种方法;
ActionForm类提供的一些公共方法:
public void setMultipartRequestHandler(MultipartTequestHandler multipartRequestHandler)
public MultipartRequestHandler getMultipartRequestHandler()
上面这些方法用于读取或设置上载文件的多部分的请求处理程序。
public ActionErrors validate(ActionMapping mapping,ServletRequest request)
public ActionErrors validate(ActionMapping mapping,HttpServletRequest request)
Action类的目的是执行请求的商业逻辑,入口函数主要有perform()和execute():
Action类定义的各种受保护的访问方法,它可以被应用程序开发者提供的专用子类使用。
下列方法读取或设置与一个指定的请求相关联的现场(表示应该显示的与应用程序关联的消息的语言):
protected Locale getLocale(HttpServletRequest request)
protected void setLocale(HttpServletRequest request,Locale locale)
下面的方法读取应用程序的消息资源:
protected MessageResource getResources()
如果按下表单上与动作关联的取消按钮的话,该方法返回true。
protected Boolean isCancelled(HttpServletRequest request)
当应用程序出错时,Action类可以用saveErrors()方法来保存出错消息:
Protected void saveErrors(HttpServletRequest request, ActionErrors errors)
3、在应用中,通常只扩展ActionForm、Action两个类.
对于自定义的方法,可放在ActionForm、Action两个类的扩展类中,对于ActionForm的方法,以Bean的形式调用;对于Action的方法,可在perform()和execute()等入口方法中调用。
在新版的JSPStudio中,在execute()方法中定义各种消息处理函数,从而实现了类似于ASP.NET的事件驱动程序设计方法。
在新版的JSPStudio中,利用JSP的可视化编辑页面作为类似于ASP.NET的WinForm页,从而实现了类似于ASP.NET的WinForm程序设计方法。
4.在Action类的execute()方法中直接访问ActionForm ,如果配置了ActionForm和Action映射,Struts框架就会把ActionForm作为参数传给Action类的execute()方法,在execute()方法中,可以直接读取或设置ActionForm属性。
5.ActionErrors类封装了一组验证错误,它的用法类似 Map类。而ActionMessage类封装了单个验证错误,它的构造函数内的参数就指向资源文件内的一个错误文本。例如语句"ActionMessage("error.login.userName")"中的参数"error.login.userName" 其实就是资源文件ApplicationResources.properties中的一条错误文本的键(key)。通过ActionErrors对象的add()方法,可以把ActionMessage对象加入到ActionErrors对象中。
6.设置资源文件在struts的资源文件ApplicationResources.properties中设置可能的验证错误的标识:在资源文件中我们不能直接写中文,否则会出现乱码,有两种解决方式:一是安装相应的插件(可以在网上找找);二是可以使用JDK安装目录/bin下的native2ascii可执行文件,将中文翻译成ASCII形式放入到ApplicationResources.properties相应的Key下。
7.修改配置文件struts-config.xml将配置文件struts-config.xml中元素的validate属性设置为true,此处,还需要元素,以指明资源文件的路径。如下:资源文件书写类似JAVA文件,有包之分,注意是点号,不要写成反斜杠/
8.在页面 中加入错误标记:是struts的一个自定义标记。它能根据它的property属性从资源文件中取出相应的验证错误,并输入页面中指定的位置显示验证错误。
Struts框架中的视图组件主要包括:
JSP页面。
ActionForm类 。
Struts自定义标签。
消息资源。
其中,ActionForm类是Struts框架的核心组件之一,是Struts的关键视图组件。在这篇文章中,将讨论ActionForm类及其作用。
ActionForm的作用机理:
ActionForm本质上是一种JavaBean,是专门用来传递表单数据的DTD(Data Transfer Object,数据传递对象)。它包括用于表单数据验证的validate()方法和用于数据复位的reset()方法。
Struts框架利用ActionForm对象来临时存放视图页面中的表单数据。例如,一个登录页面会有一个用户名输入框和一个密码输入框,以及用来提交登录请求的按扭。当用户提交登录请求后,Struts将 用户名和密码两个输入域的数据自动填充到相应的ActionForm对象中,然后控制层可以从该ActionForm对象中读取用户输入的表单数据,也可以把来自模型层的数据存放到ActionForm中,然后返回给视图显示。
ActionForm有(request)和(session)两种作用域(scope)。如果ActionForm的作用域设定为request,ActionForm实例将保存在request对象中,像其他保存在request对象中的属性一样,仅在当前请求范围内有效。如果ActionForm的作用域设定为session,那么ActionForm实例将被保存在session对象中,同一个ActionForm实例在整个HTTP会话中有效。
在Struts框架 中,ActionForm的作用机理如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/fe228b4570ad4d07ee784caa03277399.jpeg)
当验证ActionForm时,如果检测到一个或多个验证错误,Struts框架会把错误转发回配置文件struts-config.xml中元素的input属性所指定的输入页面。
ActionForm的使用方法:
1.创建ActionForm
可以扩展Struts软件包的ActionForm类来创建具体的ActionForm。Struts软件包中的ActionForm类本身 是一个抽象类,在扩展的时候,为每一个要从HTML表单中捕获的输入域定义一个属性,使表单输入域与ActionForm属性一一对应,以使ActionForm能够捕获需要的表单输入。定义了具体的属性,就可以覆盖父类 的validate()和reset()方法,来实现具体的ActionForm验证规则和初始化方法。
下面是一个小例子
![](https://i-blog.csdnimg.cn/blog_migrate/34031c708bfe702fe82d01ff5c6593aa.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0be121fa5b8988fbabbbc526af3b0fc0.gif)
/**//*
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
* Generated by MyEclipse Struts
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
* Template path: templates/java/JavaClass.vtl
![](https://i-blog.csdnimg.cn/blog_migrate/4fd96b3cf02f4c7b5c8964ac8167f7af.gif)
*/
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
package struts.form;
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
import javax.servlet.http.HttpServletRequest;
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
import org.apache.struts.action.ActionErrors;
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
import org.apache.struts.action.ActionForm;
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
import org.apache.struts.action.ActionMapping;
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/34031c708bfe702fe82d01ff5c6593aa.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0be121fa5b8988fbabbbc526af3b0fc0.gif)
/** *//**
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
* Struts框架的ActionForm对象,它可用来在用户和业务层之间舆用户的输入数据。
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
* ActionForm也叫FormBean.Struts框架会自动从请求中惧输入数据,再将 这些
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
* 数据交给一个使用FormBean的Action对象,接着FormBean可以再交给业务层
![](https://i-blog.csdnimg.cn/blog_migrate/4fd96b3cf02f4c7b5c8964ac8167f7af.gif)
*/
![](https://i-blog.csdnimg.cn/blog_migrate/34031c708bfe702fe82d01ff5c6593aa.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0be121fa5b8988fbabbbc526af3b0fc0.gif)
public class LoginHandlerForm extends ActionForm
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/3112b7b6526db5bc83e275260ae60525.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f2671b7f42ce505d9bf55a7a0ca257fb.gif)
/**//*
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
* Generated fields
![](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
*/
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/3112b7b6526db5bc83e275260ae60525.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f2671b7f42ce505d9bf55a7a0ca257fb.gif)
/** *//** userName property */
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
private String userName;
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/3112b7b6526db5bc83e275260ae60525.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f2671b7f42ce505d9bf55a7a0ca257fb.gif)
/** *//** userPwd property */
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
private String userPwd;
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
//验证方法,主要用于验证视图上的数据,例如非空之类,
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
//如果要进行业务验证,则应该在Action中进行!
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
public ActionErrors validate(ActionMapping mapping,
![](https://i-blog.csdnimg.cn/blog_migrate/3112b7b6526db5bc83e275260ae60525.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f2671b7f42ce505d9bf55a7a0ca257fb.gif)
HttpServletRequest request)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
return null;
![](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
//初始化首先调用的方法
![](https://i-blog.csdnimg.cn/blog_migrate/3112b7b6526db5bc83e275260ae60525.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f2671b7f42ce505d9bf55a7a0ca257fb.gif)
public void reset(ActionMapping mapping, HttpServletRequest request)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
// TODO Auto-generated method stub
![](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/3112b7b6526db5bc83e275260ae60525.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f2671b7f42ce505d9bf55a7a0ca257fb.gif)
public String getUserName()
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
return userName;
![](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/3112b7b6526db5bc83e275260ae60525.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f2671b7f42ce505d9bf55a7a0ca257fb.gif)
public void setUserName(String userName)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
this.userName = userName;
![](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/3112b7b6526db5bc83e275260ae60525.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f2671b7f42ce505d9bf55a7a0ca257fb.gif)
public String getUserPwd()
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
return userPwd;
![](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/3112b7b6526db5bc83e275260ae60525.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f2671b7f42ce505d9bf55a7a0ca257fb.gif)
public void setUserPwd(String userPwd)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
this.userPwd = userPwd;
![](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/4fd96b3cf02f4c7b5c8964ac8167f7af.gif)
}
在以上的loginActionForm中,validate()方法和reset()方法是ActionForm中两种可以覆盖的方法。validate()方法中定义具体的ActionForm验证规则。
运行一个JSP时,服务器端执行哪些组件和方法,可执行哪些自定义方法。
1、对于一个JSP请求,服务器端自动调用ActionServlet、ActionMapping、ActionForm、Action、ActionForward等组件和运行它们相应的方法。
ActionServlet的方法主要有:process(),InitApplication(),InitMapping(),InitDigester(),InitOther();
ActionServlet提供了公共方法,可以被Action类实例使用。本节我们简要讨论一些方法:关于ActionServlet方法的更详细信息,请参数在http://jakarta.apache.org/struts中的Struts文档。
ActionServlet有允许我们增加或删除ActionForm beans、ActionForwards和ActionMappings的方法。这些方法的基本形式如下所示:
public void addFormBean(ActionFormBean formBean)
public void removeBean(ActionFormBean formBean)
public void addForward(ActionForward forward)
public void removeForward(ActionForward formward)
public void addMapping(ActionMapping mapping)
public void removeMapping(ActionMapping mapping)
每个定义显示了方法的范围(都是public)、方法返回的对象(都为void)以及方法的参数,下列方法根据名字找到这些对象:
public ActionFormBean findFormBean(String name)
public ActionForward findForward(String name)
public ActionMapping findMapping(String name)
接下来的两个方法用于处理数据源:
public void addDataSource(String key,DataSource ds)
public Datasource findDataSource(String key) – trturns a DataSource instance
findDataSource()方法用名字查找数据源。数据源可能是在Struts配置文件中静态定义的,也可能是用addDataSource()方法动态增加的。
最后,我们可以用下列的destroy()方法很优雅地关闭ActionServlet,并用reload()方法从Struts配置文件中重新装入信息到ActionServlet。
ActionForm是抽象类,用于定义用户Bean,在这里,用户可自定义各种方法;
ActionForm类提供的一些公共方法:
public void setMultipartRequestHandler(MultipartTequestHandler multipartRequestHandler)
public MultipartRequestHandler getMultipartRequestHandler()
上面这些方法用于读取或设置上载文件的多部分的请求处理程序。
public ActionErrors validate(ActionMapping mapping,ServletRequest request)
public ActionErrors validate(ActionMapping mapping,HttpServletRequest request)
Action类的目的是执行请求的商业逻辑,入口函数主要有perform()和execute():
Action类定义的各种受保护的访问方法,它可以被应用程序开发者提供的专用子类使用。
下列方法读取或设置与一个指定的请求相关联的现场(表示应该显示的与应用程序关联的消息的语言):
protected Locale getLocale(HttpServletRequest request)
protected void setLocale(HttpServletRequest request,Locale locale)
下面的方法读取应用程序的消息资源:
protected MessageResource getResources()
如果按下表单上与动作关联的取消按钮的话,该方法返回true。
protected Boolean isCancelled(HttpServletRequest request)
当应用程序出错时,Action类可以用saveErrors()方法来保存出错消息:
Protected void saveErrors(HttpServletRequest request, ActionErrors errors)
3、在应用中,通常只扩展ActionForm、Action两个类.
对于自定义的方法,可放在ActionForm、Action两个类的扩展类中,对于ActionForm的方法,以Bean的形式调用;对于Action的方法,可在perform()和execute()等入口方法中调用。
在新版的JSPStudio中,在execute()方法中定义各种消息处理函数,从而实现了类似于ASP.NET的事件驱动程序设计方法。
在新版的JSPStudio中,利用JSP的可视化编辑页面作为类似于ASP.NET的WinForm页,从而实现了类似于ASP.NET的WinForm程序设计方法。
4.在Action类的execute()方法中直接访问ActionForm ,如果配置了ActionForm和Action映射,Struts框架就会把ActionForm作为参数传给Action类的execute()方法,在execute()方法中,可以直接读取或设置ActionForm属性。
5.ActionErrors类封装了一组验证错误,它的用法类似 Map类。而ActionMessage类封装了单个验证错误,它的构造函数内的参数就指向资源文件内的一个错误文本。例如语句"ActionMessage("error.login.userName")"中的参数"error.login.userName" 其实就是资源文件ApplicationResources.properties中的一条错误文本的键(key)。通过ActionErrors对象的add()方法,可以把ActionMessage对象加入到ActionErrors对象中。
6.设置资源文件在struts的资源文件ApplicationResources.properties中设置可能的验证错误的标识:在资源文件中我们不能直接写中文,否则会出现乱码,有两种解决方式:一是安装相应的插件(可以在网上找找);二是可以使用JDK安装目录/bin下的native2ascii可执行文件,将中文翻译成ASCII形式放入到ApplicationResources.properties相应的Key下。
7.修改配置文件struts-config.xml将配置文件struts-config.xml中元素的validate属性设置为true,此处,还需要元素,以指明资源文件的路径。如下:资源文件书写类似JAVA文件,有包之分,注意是点号,不要写成反斜杠/
8.在页面 中加入错误标记:是struts的一个自定义标记。它能根据它的property属性从资源文件中取出相应的验证错误,并输入页面中指定的位置显示验证错误。