上传文件、Validator自动校验数据、动态FormBean

上传文件

Struts提供了<html:file>标签,集成了Apachecommons-upload工具包,把上传文件封装成FormFile对象,直接获取该对象,将文件数据保存即可。

上传文件的Form表单要指定enctype属性为multipart/form-datamethod方法必须为poststruts1.x<html:form>默认methodpost

<html:form action="upload.do" method="post" enctype="multipart/form-data">

    文件名称:<html:text property="fileName"></html:text><br/>

     选择上传文件:<html:file property="file"></html:file><br/>

     <html:submit value="上传"></html:submit>

</html:form>

必须通过io流操作文件。

this.getServlet().getServletContext().getRealPath("/")+"upload//"得到上传文件所在的文件夹的路径

uploadForm.getFile().getFileName()可以得到上传文件的原始名称。

上传文件时若需要改名则必须保存文件的后缀。

通过uploadForm.getFileName() 得到修改后的文件名称。

通过uploadForm.getFile().getFileName().split("//.")[1]可以得到上传文件的后缀。

最后得到上传文件的完整路径为:

this.getServlet().getServletContext().getRealPath("/")+"upload//"+uploadForm.getFileName()+"."+uploadForm.getFile().getFileName().split("//.")[1] ;

通过FormFile取得文件的字节流写入文件。

public ActionForward execute(ActionMapping mapping, ActionForm form,

           HttpServletRequest request, HttpServletResponse response) {

       UploadForm uploadForm = (UploadForm) form;// TODO Auto-generated method stub

       String uploadPath = this.getServlet().getServletContext().getRealPath("/")+"upload//"+uploadForm.getFileName()+"."+uploadForm.getFile().getFileName().split("//.")[1] ;

       try {

           OutputStream out = new FileOutputStream(new File(uploadPath)) ;

           FormFile ff = uploadForm.getFile() ;

           byte b[] = ff.getFileData() ;

           out.write(b) ;

           out.close() ;

       } catch (FileNotFoundException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       } catch (IOException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

       return null;

                    }

 

Validator自动校验数据

除了FormBean里的validate()方法外,struts还提供Validator插件进行数据校验,它能在JSP页面里生成javascript脚本,在客户端进行数据校验。

支持ValidatorFormBean必须继承StrutsValidatorForm

public class ValidatorDemoForm extends ValidatorForm {

         private String email;

         private int age;

         private String name;

   ……………………

}

 输入表单validatorDemo.jsp,校验时Struts使用<html:javascript/>标签,在该标签处生成javascript校验代码。<html:javascript>标签的formNamevalidation.xml中的配置的formname属性对应。表单使用onsubmit事件,此时οnsubmit="return validateValidatorDemoForm(this);"中的函数名也用到了formName

 

<html:form action="/validatorDemo" οnsubmit="return validateValidatorDemoForm(this);">

                            姓名:<html:text property="name"></html:text><html:errors property="name"/><br/>

                            年龄:<html:text property="age"></html:text><html:errors property="age"/><br/>

                            邮件:<html:text property="email"></html:text><html:errors property="email"/><br/>

                            <html:submit value="提交"/>

                            <html:javascript formName="validatorDemoForm"/>

</html:form>

 

Validator插件使用配置式数据校验,校验规则配置在validation.xml中。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE form-validation PUBLIC

          "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"

          "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">

 

<form-validation>

         <formset>

                   <form name="validatorDemoForm">

                            <field property="name" depends="required">

                                     <msg name="required"

                                               key="validatorDemo.error.nameRequired" />

                            </field>

                            <field property="age"

                                     depends="required, integer, intRange">

                                     <arg position="0" name="intRange" key="${var:min}"

                                               resource="false" />

                                     <arg position="1" name="intRange" key="${var:max}"

                                               resource="false" />

                                     <var>

                                               <var-name>min</var-name>

                                               <var-value>0</var-value>

                                     </var>

                                     <var>

                                               <var-name>max</var-name>

                                               <var-value>100</var-value>

                                     </var>

 

                                     <msg name="required"

                                               key="validatorDemo.error.ageRequired" />

                                     <msg name="integer"

                                               key="validatorDemo.error.ageInteger" />

                                     <msg name="intRange" key="validatorDemo.error.ageRange" />

                            </field>

                            <field property="email" depends="required, email">

 

                                     <arg position="0" key="email" />

 

                                     <msg name="required"

                                               key="validatorDemo.error.emailRequired" />

                                     <msg name="email" key="validatorDemo.error.emailFormat" />

                            </field>

                   </form>

         </formset>

</form-validation>

 

如校验失败会显示<msg>配置的错误信息,该信息配置在资源文件ApplicationResources.properties中。

validatorDemo.error.nameRequired = /u8BF7/u8F93/u5165/u59D3/u540D

validatorDemo.error.ageRequired = /u8BF7/u8F93/u5165/u5E74/u9F84

validatorDemo.error.ageInteger = /u5E74/u9F84/u5FC5/u987B/u4E3A/u6574/u6570

validatorDemo.error.ageRange = /u5E74/u9F84/u5FC5/u987B/u4ECE{0}/u5230{1}/u4E4B/u95F4

validatorDemo.error.emailRequired = /u8BF7/u8F93/u5165/u7535/u5B50/u90AE/u4EF6

validatorDemo.error.emailFormat = /u7535/u5B50/u90AE/u4EF6/u4E0D/u5408/u6CD5

之后将validation.xml连同校验规则库文件validator-rules.xml文件配置到struts-config.xml文件中,配置为plugin形式。

pathnames为校验规则库文件、校验规则配置文件的路径。

stopOnFirstError为如果前面校验失败是否停止后面的校验。

<message-resources parameter="com.hym.struts.ApplicationResources" />

   <plug-in className="org.apache.struts.validator.ValidatorPlugIn">

                   <set-property property="pathnames"

                            value="/WEB-INF/validator-rules.xml, /WEB-INF/validation.xml" />

                   <set-property property="stopOnFirstError" value="false" />

</plug-in>

动态FormBean

Struts提供一种动态FormBeanDynaActionForm 这种FormBean不需要实现具体的类,即该FormBean类并不是真的存在。它的变量配置在struts-config.xml中。

如:下面为dynaDemo配置了3个属性:nameagebirthday,分为StringIntegerDate类型,并指定了初始值。

<form-bean name="dynaDemoForm" type="org.apache.struts.action.DynaActionForm">

    <form-property name="birthday" type="java.sql.Date" initial=""></form-property>

    <form-property name="age" type="java.lang.Integer" initial="18"></form-property>

    <form-property name="name" type="java.lang.String" initial=""></form-property>

</form-bean>

 

由于不同一般的FormBean,所以Action中使用get(String key)来获取动态属性FormBean的属性值。

public class DynaDemoAction extends Action {

    public ActionForward execute(ActionMapping mapping, ActionForm form,

           HttpServletRequest request, HttpServletResponse response) {

       DynaActionForm dynaForm = (DynaActionForm) form ;

       String name = (String)dynaForm.get("name") ;

       Integer age = (Integer)dynaForm.get("age") ;

       Date birthday =(Date)dynaForm.get("birthday") ;

       request.setAttribute("name", name) ;

       request.setAttribute("age", age) ;

       request.setAttribute("birthday", birthday) ;

       return mapping.findForward("suc");

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值