struts1的验证(FormBean方式)

 

 

启用Validator插件

虽然Validator框架是与Struts封装在一起提供的,但在默认状况下Validator并不被启用。为了启用Validator,要向你的应用程序的struts-config.xml文件中添加下面的插件定义。

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

    <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>

  </plug-in>

 

 Struts的出现就是为了全面消除服务器断程序的脚本嵌套,全面分层,通常我们的表单在提交时都需要进行数据验证,而这在以前通常是用客户端的javascript进行过滤后再由服务器端的脚本进行验证,这样的缺点是移植性很差,每次都需要重新编写源程序,而struts框架则提供了一个很好的验证机制,它不需要再编写脚本,而是通过验证器进行验证.

  struts验证又分为2种,一种是在ActionForm bean表单属性JavaBean的validate()方法中定义,在服务器断验证;另外一种则是通过验证器分别在客户端和服务器端进行双层验证.

 1.在ActionForm Bean中验证:

  首先需要介绍Struts的工作原理:

   (1).用户从表单提交数据,JSF表现为:<html:form action="/login">,普通JSP表现为:<form action="/login.do">

   (2),程序将通过Struts配置文件(既ActionServlet)struts-config.xml的<action>节点下的path属性的值与form的action属性值进行匹配,如果配上了,程序将通过本action的name属性所对应的值与<form-bean>节点的name进行匹配,如果成功,则通过<form-bean>的type属性值找到ActionForm bean的类文件.

  (3)如果action中的validate属性设置为true或yes的话,程序将调用ActionForm bean的public ActionErrors validate(ActionMapping mapp,HttpServletRequest req)方法进行验证,结果返回一个ActionErrors类型以便我们将其catch住.

 (4)程序将ActionForm的各个属性做为参数传回给Action,Action再调用具体业务处理的JavaBean进行商业活动,再将程序转向View层的显示页面

  具体方法:

1.创建表单login.jsp 由JSF实现

<%@taglig uri="http://jakarta.apache/struts-bean" prefix="bean"%>

<%@taglib uri=http://jakarta.apache/struts-html prefix="html" %>

<html:html>

<body>

<!--捕获验证信息-->

<html:errors name="loginName"/>

  <html:form action="/login">

  userName:<html:text property="userName"/>

  passWord:<html:password property="passWord" redisplay="false"/>

   <html:submit/><html:reset/>

</html:form>

<body>

</html:html>

2.建立ActionForm类 loginForm.java

package com.liuhao.struts;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.action.ActionErrors;

import org.apache.struts.action.ActionError;

import javax.servlet.http.HttpServletRequest;

public class loginForm extends ActionForm{

//定义属性,和表单里一致

private String userName,passWord;

   public ActionForm(){

  super();

}

 //数据验证方法

public ActionErrors validate(ActionMapping mapp,HttpServletRequest req){

   ActionErrors errors=new ActionErrors();

   if(this.userName==null || this.passWord==null)

     errors.add("loginName",new ActionError("errors.required","userName and passWord fie));

   return errors;

}

public void reset(ActionMapping mapp,HttpServletRequest req){

  this.userName="";

  this.passWord="";

}

//定义相关属性的 getter和setter

public void setUserName(String userName){

this.userName=userName;

}

public void setPassWord(String passWord){

this.passWord=passWord;

}

public String getUserName(){

return this.userName;

}

public String getPassWord(){

return this.passWord;

}

   }

 

3.定义Action类 loginAction.java

package com.liuhao.struts;

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.action.ActionForward;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class loginAction extends Action{

    public loginAction(){

super():

}

public ActionForward execute(ActionMapping mapp,ActionForm form,HttpServletRequest req,HttpServletResponse res)throws Exception{

    org.com.liuhao.struts.loginForm Form=(loginForm)form;

    //将form对象实例写入当前请求中

   req.setAttribute("form",Form);

   //转向输出页面

  return mapp.findForward("sucess");

}

   }

 3.编写输出文件out.jsp

<%@taglib uri="/WEB-INF/struts-beans.tld" prefix="bean"%>

<%@taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

<%@page import="com.liuhao.struts.loginForm" %>

<% loginForm form=(loginForm)request.getAttribute("form");

   out.println("your name is "+form.getUserName());

   out.println("your password is "+form.getPassWord());

%>

4.配置文件:struts-config.xml

在<form-beans>中定义formbean

<form-bean name="loginForm" type="com.liuhao.struts.loginForm">

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

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

 </form-bean>

在<action-mapping>中定义action

<action name="loginForm" path="/login" type="com.liuhao.struts.loginAction"

        input="/index.jsp" validate="true">

<forward name="sucess" path="/out.jsp"/>

定义消息文件的路径,也可以是com.netshop.action.ApplicationResources,ApplicationResources只能放在src目录下。

<message-resources parameter="ApplicationResources" />

</action>

5.在application resource中定义:error.requires={0} is not allowed null

6.即可测试程序:"如果没有输入任何信息,login.jsp会输出:username and passWord field is not allowed null

注解:  这样的方式优点是:彻底了消除了脚本的存在,是程序得到了很好的分层,但是却也寸在着移植性差的问题,因为每修改一次严整程序,都需要到loginForm中去修改validate方法.

本方式不用在工程中添加validation.xml文件。完全采用手工的方式进行验证。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值