Struts中的校验框架

使用Struts1.x中的validator-rules.xml规则验证表单,请看demo

首先是web.xml文件

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>3</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>3</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>validateFrame.jsp</welcome-file> </welcome-file-list> </web-app>

然后是需要校验的前台页面validateFrame.jsp

<%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%> <html:form action="/validateFrame"> uname : <html:text property="uname"/><html:errors property="uname"/><br/> email : <html:text property="email"/><html:errors property="email"/><br/> age : <html:text property="age"/><html:errors property="age"/><br/> tel : <html:text property="tel"/><html:errors property="tel"/><br/> <html:submit/><html:cancel/> </html:form>

接着是校验成功后显示的validateFrameSuccess.jsp页面

<%@ page pageEncoding="UTF-8"%> <%@ page import="com.jadyer.form.ValidateFrameForm"%> <% ValidateFrameForm vff = (ValidateFrameForm)session.getAttribute("validateFrameForm"); %> <font color="blue"><%=vff.getUname()%></font>,登录成功

下面是Struts1.x中的核心配置文件struts-config.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <struts-config> <form-beans> <form-bean name="validateFrameForm" type="com.jadyer.form.ValidateFrameForm" /> </form-beans> <action-mappings> <action path="/validateFrame" attribute="validateFrameForm" name="validateFrameForm" input="/validateFrame.jsp" type="com.jadyer.action.ValidateFrameAction"> <forward name="validateFrameSuccess" path="/validateFrameSuccess.jsp" redirect="true" /> </action> </action-mappings> <message-resources parameter="com.jadyer.util.ApplicationResources" /> <!-- 此时需要将validator-rules.xml和validation.xml文件在WebRoot//WEB-INF//目录下 --> <!-- 其中validator.xml是我们自己编写的,而validator-rules.xml是由Struts1.x提供的 --> <!-- 在Struts1.2中,validator-rules.xml位于//WebRoot//WEB-INF根目录中 --> <!-- 在Struts1.3中,validator-rules.xml位于struts-core-1.3.8.jar中的org.apache.struts.validator包中 --> <!-- 然后将validator-rules.xml另存为validation.xml,并将该文件第12行<plug-in>拷贝到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-config>

接着是用于校验表单字段的validation.xml文件

<!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-bean>,其name属性必须与struts-config.xml的<form-bean>标记的name属性一致 --> <!-- 并且它所对应的validateFrameForm必须是支持验证的Form,即需要继承ValidatorForm --> <!-- 也就是说它必须是ValidatorForm的子类,而普通的ActionForm是不支持框架验证的 --> <form name="validateFrameForm"> <!-- property的值对应前台页面validateFrame.jsp里的<html:text property="uname"/>中的property值 --> <!-- depends用于指定所使用的验证器,即具体的校验的方式,这里的required表示必填 --> <field property="uname" depends="required,mask"> <!-- 当resource为TRUE时,表示使用来自国际化资源文件中的消息,反之则要显式的指定key属性的消息文本 --> <!-- 其中arg后的数字必须与资源文件中占位符的数字相同。若占位符为{2},那么這里必须写成agr2方可生效 --> <arg0 key="输入的用户名" resource="false"/> <var> <!-- mask验证也称为掩码验证 --> <var-name>mask</var-name> <!-- 限定输入的内容必须是字符串 --> <var-value>[A-Za-z]</var-value> </var> </field> <field property="email" depends="required,email"> <arg0 key="lab.email"/> </field> <field property="age" depends="required,intRange"> <arg0 key="lab.age" /> <arg1 name="intRange" key="${var:min}" resource="false" /> <arg2 name="intRange" key="${var:max}" resource="false" /> <var> <var-name>min</var-name> <var-value>15</var-value> </var> <var> <var-name>max</var-name> <var-value>100</var-value> </var> </field> <field property="tel" depends="required,mask"> <arg0 key="lab.tel"/> <var> <var-name>mask</var-name> <var-value>^/d{3}(-/d{8})?$</var-value> </var> </field> </form> <!-- 支持多表单验证 --> <!-- <form name="enterForm"> <field property="uname" depends="required,mask"> <arg0 key="lab.name"/> <var> <var-name>mask</var-name> <var-value>[A-Za-z]</var-value> </var> </field> <field property="email" depends="required,email"> <arg0 key="lab.email"/> </field> </form> --> </formset> </form-validation> <!-- =================================================================================================== 在Struts1.x使用自带的框架验证前台表单字段时,需要用到validator-rules.xml和validation.xml文件 在Struts1.2中,validator-rules.xml位于//WebRoot//WEB-INF根目录中 另存该文件为validation.xml,并将该文件中第12行的<plug-in>拷贝到struts-config.xml中 在Struts1.3中,validator-rules.xml位于struts-core-1.3.8.jar中的org.apache.struts.validator包中 复制该文件中的内容,然后粘贴到新建的//WebRoot//WEB-INF//validation.xml中即可 =================================================================================================== 其中validator-rules.xml是加载Struts1.x框架的时候就已经出现的文件 在validator-rules.xml的第23行左右有一个#Struts Validator Error Messages的说明 说明该文件中所包含的是Struts中的验证的错误提示信息,在它下面列举了各种错误类别以及它们的具体内容和所在包等等 这个validator-rules.xml文档其实就是我们俗称的验证框架,但validator-rules.xml只是一个标准,不能直接使用 而我们必须利用这个标准撰写出一个设计准则,也就是我们自定义的validation.xml文件 =================================================================================================== 当Struts运行的时候,它会把一个标准和一个具体的使用规则同时加载到框架中。然后接收从客户端发过来的信息 再按照我们指定的validation规则,使用validator-rules标准去验证数据的合理性 所以,真正的验证需要写在validation.xml文件中 =================================================================================================== --> <!-- 下面以age的判断为例,简单说明一下它的用法 --> <!-- ========================================================================================================= 关于age这里设定了两种验证方式:required和intRange,即必填和整数大小限制。二者以逗号间隔 我们可以在validator-rules.xml文件的第61行查找到<validator name="required"/> 它的msg值为errors.required,然后在该文件的从第24行可以发现errors.required={0} is required. 所以,我们就可以在国际化的资源文件中建立一个名为errors.required的属性 注意,此时国际化资源文件中新增的errors.required属性名要与validator-rules.xml的第61行的msg的值相同 然后可以把"{0} is required"作为errors.required属性的英文显示值,把"{0} 不能为空"作为它的中文显示值 ========================================================================================================= 其中{0}代表占位符。然后在国际化资源文件中新增lab.age属性,设定该属性的英文值为"age",中文值为"姓名" 接着可以在validation.xml中新增<arg0 key="lab.age"/>,这里key值应与资源文件中lab.age属性名相同 而{0}显示的实际值则由arg0的key值决定。所以,这里面{0}占位符所显示的实际值其实就是lab.age的具体值 所以,应用运行时,如果用户提交时没有输入age,那么就会提示"age is required"或者"年龄 不能为空" ========================================================================================================= 然后参阅validator-rules.xml第234行和第37行,以同样的方式在国际化资源文件中新增errors.range属性 将"{0} is not in the range {1} through {2}"作为该属性在英文状态下显示的文本 将"{0} 的取值必须位于 {1} 与 {2} 之间"作为该属性在中文状态下显示的文本 ========================================================================================================= 接着回到validation.xml中。在这里对年龄的限定范围,进行区间判断 这里新增的<arg1>和<arg2>分别代表errors.range属性的占位符的值 由于这是对年龄范围进行设置,所以新增的<arg1>的name值应为depends中设定的intRange 最好,还要注意一下key的书写形式:key="${var:min}" ========================================================================================================= 所以,应用运行时,如果用户提交时所输入的年龄不再15和100区间中 那么,就会显示"age is not in the range 15 through 100"或者"年龄 的取值必须位于 15 与 100 之间" ========================================================================================================= -->

然后是用到的Struts1.x中的ActionForm类

package com.jadyer.form; import org.apache.struts.validator.ValidatorForm; //只有ValidatorForm的子类才支持Struts1.x中的validate校验框架的验证 @SuppressWarnings("serial") public class ValidateFrameForm extends ValidatorForm { private String email; private String uname; private String tel; private Integer age; /*--四个属性的setter和getter略--*/ }

然后是用到的Struts1.x中的Action类

package com.jadyer.action; 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 com.jadyer.form.ValidateFrameForm; public class ValidateFrameAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { ValidateFrameForm vff = (ValidateFrameForm) form; System.out.println("uname:" + vff.getUname()); System.out.println("email:" + vff.getEmail()); return mapping.findForward("validateFrameSuccess"); } }

最后是用到的国际化资源文件ApplicationResources.properties

errors.email = {0} is an invalid e-mail address errors.invalid = {0} is invalid errors.range = {0} is not in the range {1} through {2} errors.required = {0} is required lab.age = Age lab.email = Email lab.name = Name lab.tel = Tel #下面是ApplicationResources_zh_CN.properties文件的内容 errors.email = {0} /u4E0D/u662F/u5408/u6CD5/u7684Email/u5730/u5740 errors.invalid = {0} /u8F93/u5165/u7684/u5185/u5BB9/u4E0D/u5408/u7406 errors.range = {0} /u7684/u53D6/u503C/u5FC5/u987B/u4F4D/u4E8E {1} /u4E0E {2} /u4E4B/u95F4 errors.required = {0} /u4E0D/u80FD/u4E3A/u7A7A lab.age = /u5E74/u9F84 lab.email = /u7535/u5B50/u90AE/u4EF6 lab.name = /u59D3/u540D lab.tel = /u7535/u8BDD

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个简单的示例,演示如何使用 Struts2 和 Hibernate 框架技术创建登录界面。 首先,您需要创建一个名为“login.jsp”的 JSP 页面,该页面将显示登录表单。在此页面,您将需要使用 Struts2 标记库创建表单元素,例如文本框、密码框和提交按钮。示例代码如下: ``` <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <title>Login Page</title> </head> <body> <h2>Login Form</h2> <s:form action="loginAction"> <s:textfield name="username" label="Username" /> <s:password name="password" label="Password" /> <s:submit value="Login" /> </s:form> </body> </html> ``` 接下来,您需要创建一个名为“LoginAction.java”的 Struts2 操作类,该类将处理提交的表单数据并验证用户凭据。在此类,您将需要使用 Hibernate 框架技术从数据库检索用户信息。示例代码如下: ``` import com.opensymphony.xwork2.ActionSupport; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.query.Query; public class LoginAction extends ActionSupport { private String username; private String password; public String execute() { // Create session factory SessionFactory factory = new Configuration() .configure("hibernate.cfg.xml") .buildSessionFactory(); // Create session Session session = factory.getCurrentSession(); try { // Begin transaction session.beginTransaction(); // Query for user with matching username and password Query<User> query = session.createQuery("from User where username=:u and password=:p", User.class); query.setParameter("u", username); query.setParameter("p", password); User user = query.uniqueResult(); // Commit transaction session.getTransaction().commit(); // Check if user was found if (user != null) { return SUCCESS; } else { return LOGIN; } } catch (Exception e) { e.printStackTrace(); return ERROR; } finally { factory.close(); } } // Getter and setter methods } ``` 在上面的代码,我们使用 Hibernate 的相关类从数据库检索具有匹配用户名和密码的用户。如果找到了用户,则返回 Struts2 成功结果代码,否则返回登录结果代码。 最后,您需要在 Struts2 配置文件定义操作和结果。在此示例,我们将在“struts.xml”文件创建以下条目: ``` <action name="loginAction" class="LoginAction"> <result name="success">welcome.jsp</result> <result name="login">login.jsp</result> <result name="error">error.jsp</result> </action> ``` 在上面的代码,我们定义了一个名为“loginAction”的操作,该操作将调用“LoginAction”类的“execute”方法。我们还定义了三个结果,分别为“success”、“login”和“error”。如果用户成功登录,则返回“welcome.jsp”页面,否则返回“login.jsp”页面。 这就是使用 Struts2 和 Hibernate 框架技术创建登录界面的基本过程。希望这可以帮助您入门!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值