- 浏览: 41742 次
- 性别:
- 来自: 青岛
文章分类
最新评论
-
yangyiqian:
http://hi.baidu.com/wxl543/blog ...
struts2首页跳转后执行action
在编写Action这一章节中,我们通过几行java代码来验证username和password。当然,在大型的应用程序中,这将是个很耗时的工作,即使这几行java代码也可能变成维护的重大负担。
令人高兴的是,本框架提供了一个验证框架,这个验证框架能够对输入数据进行后台验证。
一.代码准备
验证能够通过XML文档来描述,或者使用注解(annotations)。XML文档的名称以Action的名字为开头,以“-validation”作为文件名后缀。当我们想要验证OrderAction的时候,我们文件名可以
命名为OrderAction-validation.xml。OrderAction-validation.xml的代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN"
"xwork-validator-1.0.2.dtd">
<validators>
<field name="order.orderid">
<field-validator type="required">
<message key="order.orderid">uuuuu</message>
</field-validator>
<field-validator type="int">
<param name="min">1</param>
<param name="max">100</param>
<message key="order.orderid">8888</message>
</field-validator>
</field>
<field name="order.totalnum">
<field-validator type="required">
<message key="order.totalnum">9999</message>
</field-validator>
<field-validator type="int">
<param name="min">1</param>
<param name="max">100</param>
<message key="order.totalnum">9999</message>
</field-validator>
</field>
<field name="order.orderdate">
<field-validator type="required">
<message key="order.orderdate">your join is required</message>
</field-validator>
<field-validator type="date">
<param name="min">2000-10-10</param>
<param name="max">2008-01-07</param>
<message key="order.orderdate">9999</message>
</field-validator>
</field>
</validators>
其中message中的key的值使用的消息资源的键,消息资源文件为package.properties
order.orderid=your orderid is not null
order.ordermc=your ordermc is not null
order.totalnum=your totalnum is not null
order.totalprice=your totalprice is not null
order.email=your email is not null
order.phone=your phone is not null
order.orderdate=youre orderdateis not null
创建一个Order.java(Action),代码如下:
package org.itfuture.www.actions;
import org.itfuture.www.model.Order;
import com.opensymphony.xwork2.ActionSupport;
public class OrderAction extends ActionSupport {
private Order order;
public OrderAction()
{
}
public String add(){
return "success";
}
public String update(){
return "success";
}
//重写了一下
@Override
public String input()
{
return this.INPUT;
}
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
}
}
其中Order为数据对象,Order.java的代码为:
package org.itfuture.www.model;
import java.io.Serializable;
import java.util.Date;
public class Order implements Serializable
{
private Integer orderid;
private String ordermc;
private Integer totalnum;
private Double totalprice;
private Date orderdate;
private String email;
private String phone;
public Order()
{
}
public Integer getOrderid() {
return orderid;
}
public void setOrderid(Integer orderid) {
this.orderid = orderid;
}
public String getOrdermc() {
return ordermc;
}
public void setOrdermc(String ordermc) {
this.ordermc = ordermc;
}
public Integer getTotalnum() {
return totalnum;
}
public void setTotalnum(Integer totalnum) {
this.totalnum = totalnum;
}
public Double getTotalprice() {
return totalprice;
}
public void setTotalprice(Double totalprice) {
this.totalprice = totalprice;
}
public Date getOrderdate() {
return orderdate;
}
public void setOrderdate(Date orderdate) {
this.orderdate = orderdate;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
在创建OrderAction.java(Action)之后我们创建一个OrderAction-validation.xml文件。并将上述粘贴到该文件中。
接着创建一个定单的新增页面ordernew.jsp,代码如下
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<title>西安未来蓝图软件教育itfuture java培训中心</title>
<s:head/>
</head>
<body>
<s:form action="add" namespace="/validate" method="post" validate="true">
<s:textfield name="order.orderid" label="定单编号"></s:textfield>
<s:textfield name="order.ordermc" label="定单名称"></s:textfield>
<s:textfield name="order.orderdate" label="定单日期"></s:textfield>
<s:textfield name="order.totalnum" label="定单总数量"></s:textfield>
<s:textfield name="order.totalprice" label="定单总价格"></s:textfield>
<s:textfield name="order.phone" label="定单电话"></s:textfield>
<s:textfield name="order.email" label="定单Email"></s:textfield>
<s:submit></s:submit>
</s:form>
</body>
</html>
在创建一个新增成功之后的展现页面order.jsp,代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<title>西安未来蓝图软件教育itfuture java培训中心</title>
<s:head/>
</head>
<body>
新增成功!~
</body>
</html>
页面第一次显示的时候,我们不想引发验证。我们需要在输入不正确被提示之前有机会输入数据(否则刚一打开页面就提示输入框为空的提示)。不使用验证的一种方式是找到一个ActionSupport基类提
供的特定的“input”方法。为了这样做,我们需要编辑ordernew.jsp页面和Order的映射。
index.jsp的主要代码如下:
<li><a href="./validate/ordernew.jsp">定单新增(一)</a></li>
<li><a href="<s:url action="ordernew" namespace="/validate"/>">定单新增(二)</a></li>
<li><a href="<s:url action="order_input" namespace="/validate"/>">定单新增(三)</a></li>
struts.xml的修改代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="validate" namespace="/validate" extends="struts-default">
<action name="add" method="add" class="org.itfuture.www.actions.OrderAction" >
<result name="input">/validate/ordernew.jsp</result>
<result name="success">/validate/order.jsp</result>
</action>
<!--调用execute转到新增页面-->
<action name="ordernew" class="org.itfuture.www.actions.OrderAction" >
<result name="success">/validate/ordernew.jsp</result>
</action>
<!--调用传递的input方法转到新增页面-->
<action name="order_*" method="{1}" class="org.itfuture.www.actions.OrderAction" >
<result name="input">/validate/ordernew.jsp</result>
</action>
</package>
</struts>
二.校验框架代码是运行步骤和说明
为了打开order新增表单,index页面使用了三种方式其中第三个超连接涉及了order_input,当点击此超连接时。
1. 框架将这个和配置文件中的Logon_*映射相匹配起来;
2. method="{1}" 属性被method="input"替换;
3. 框架调用了OrderAction类的input方法;
4. 因为“input”在一个特殊的方法的列表中,所以验证框架将不会调用;
5. 默认的input方法返回一个“input”作为返回结果(input方法是从ActionSupport父类中的方法,本例重写了该input方法);
6. 框架展现“ordernew.jsp”来作为回应结果,没有带有任何的验证信息。
为了提交order新增表单,ordernew.jsp页面调用了OrderAction(OrderAction中的add业务)。
1. Struts2框架为目标OrderAction提供验证;
2. 找到OrderAction-validation.xml文件,框架为该类创建了一个验证对象,这个验证对象基于XML文件;
3. 验证器对输入的数据产生作用;
4. 如果验证失败,错误信息被添加到内部序列中;
5. 当所有的验证器都已经执行后,如果框架发现有错误信息产生,它寻找“input”结果对应的页面,而不调用OrderAction对象的业务方法add;
6. 如果通过验证,调用OrderAction对象的add方法,返回“success”对应的结果。
三.校验框架代码其它分析说明
1、如果点击index.jsp中的第二个超连接,那么会调用execute()方法,验证框架将会被调用,对展现的ordernew.jsp中表单输入框数据进行校验,这就会出现新增页面出现了,但验证失败的错误信
息也在页面出现了(在新增页面形成的过程中,没来得及在新增页面的表单中输入数据就校验了),这不符合常理.
2、如果点击index.jsp中的第一个超连接,直接调用ordernew.jsp,就会在该页面报错,错误信息如下:
FreeMarker template error!
Method public java.lang.String com.opensymphony.xwork2.validator.validators.ValidatorSupport.getMessage(java.lang.Object) threw an exception when invoked on
com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator@121e761
The problematic instruction:
----------
==> ${validator.getMessage(action)?js_string} [on line 50, column 26 in template/xhtml/form-close-validate.ftl]
in include "/${parameters.templateDir}/xhtml/form-close-validate.ftl" [on line 25, column 1 in template/xhtml/form-close.ftl]
----------
Java backtrace for programmers:
.......
原因是在校验配置文件OrderAction-validation.xml中我们使用了package.properties中消息键,该消息资源中的消息在不调用Action是不能使用的,只有调用Action,该页面对应的校验配置文件
OrderAction-validation.xml才能使用了package.properties中消息键。所以直接调用ordernew.jsp是不行的
四.分析说明
框架提供了一个验证框架。一个输入域可以绑定一个验证器集合。如果验证失败,框架将会返回输入信息页,并显示错误信息。为了不使用验证而到直接展现新增页面,一个特殊的“input”方法
将被调用,来代替默认的“execute”方法。
五、检验框架针对的业务方法
以上例子中的校验配置文件OrderAction-validation.xml,可以对提交给OrderAction中的所有业务方法提供校验;如果想针对Action中每个不同的业务进行数据验证,关于验证xml的文件可以这样命
名,该类名-别名(定义的action名)-validation.xml这样的话,可以针对每个不同的业务进行数据验证。
五、服务器和客户端校验
所谓的服务器校验即,提交到服务器端校验,如果在服务器端检验失败,那么把错误信息从服务器端发送到客户端。所谓的客户端检验,即在<s:form >添加 validate="true",那么会在页面根据
校验配置文件生成相应的校验js,当提交数据时,会调用页面的js在客户端校验.
发表评论
-
struts2乱码解决方法
2008-12-28 23:31 1063在struts.xml的配置文件中,在struts标签内加入下 ... -
OGNL
2008-12-20 23:14 1860OGNL是Object Graph Navigation La ... -
struts2结果类型
2008-12-11 16:36 2733视图结果类型 在struts2-core-2.0.11.2.j ... -
Struts2的select使用及默认值的测试
2008-12-10 15:02 3065<!---------------begin 以下部分转 ... -
struts2和sitemesh的整合
2008-11-25 09:39 824因为web应用里的url是个很重要的话题。而struts2和s ... -
struts2 +hibernate3+Spring 的一点总结
2008-11-25 09:02 11721:首先必须要注意的是不能在struts2的ac ... -
SSH 组合备忘.(spring2.5 struts2.0.11 hibernate3.2.3 )
2008-11-25 08:55 14291.所有的jar 包 j2ee ja ... -
整合Struts2+Spring2.0+Hibernate3.1 注意的问题
2008-11-19 16:10 1214在整合ssh2 必须要删除6个架包以为 Spring2.0+H ...
相关推荐
在`validationdemo`这个示例项目中,你可以看到一个完整的Struts2校验框架应用实例,包括Action类、校验规则配置、以及对应的视图展示。通过分析这个例子,你可以更好地理解和掌握Struts2的校验框架在实际开发中的...
Struts2 验证框架是基于 Java 语言的 Web 应用程序框架,提供了一个强大的验证机制,以确保用户输入的数据满足业务逻辑的要求。在 Struts2 中,验证机制是通过 validator 来实现的,该机制可以对用户输入的数据进行...
Struts2的校验框架提供了一种灵活而强大的方式来处理Web应用程序中的验证需求。通过合理地配置Struts2框架和正确地实现验证逻辑,可以显著提高应用程序的质量和用户体验。此外,Struts2还支持动态验证和国际化等多种...
在提供的“struts2验证框架例子”中,你可能会看到类似的代码结构和配置,通过实践这些示例,你可以更好地理解如何在实际项目中应用Struts2的验证框架。同时,它也将帮助你学习如何处理常见的验证场景,如非空检查、...
总的来说,Struts2的验证框架提供了一种方便、灵活的方式来管理Web应用的数据验证。通过深入学习和实践,你可以更好地掌握它,提升应用程序的质量和用户体验。在实际开发中,不断遇到并解决各种问题,将有助于你成为...
在Struts2中,验证框架是处理用户输入验证的关键部分,它确保了从客户端接收到的数据的质量和准确性。本示例将深入探讨Struts2验证框架的基本用法,特别适合初学者理解和掌握。 ### 一、Struts2验证框架概述 ...
### Struts2校验框架详解 #### 一、概述 Struts2作为一款流行的Java Web应用框架,提供了丰富的功能来支持开发人员构建高效且可维护的应用程序。其中,Struts2校验框架(Validation Framework)是该框架的核心特性...
综上所述,Struts2的输入校验机制不仅支持基本的手动校验,还提供了高度可配置和扩展的验证框架,使得开发者能够根据应用的具体需求,灵活地实现各种校验逻辑,从而提升应用程序的质量和用户体验。
Struts2的校验框架基于Apache Commons Validator,提供了多种预定义的验证器类型以及自定义验证器的功能。这些验证器可以在配置文件中或代码中定义,用于检查表单字段的有效性。 #### 三、示例分析 ##### 1. 配置...
8. **整合其他验证框架**:除了内置的验证功能,Struts2还可以与Hibernate Validator、JSR 303/JSR 349等Java Bean Validation标准进行集成,以利用更丰富的验证约束。 总之,Struts2的校验器是其强大功能的一部分...
Struts2提供了内置的验证框架,允许开发者自定义校验规则,以满足特定业务需求。下面将详细介绍Struts2自定义校验框架的相关知识点。 1. **Struts2验证框架概述** Struts2的验证框架主要负责处理用户提交的数据,...
Struts2作为一款流行的...通过以上对Struts2输入校验的深入总结,我们可以看到Struts2为开发者提供了灵活多样的校验方式,能够满足不同场景下的需求。了解并熟练掌握这些校验机制,有助于提升应用程序的质量和安全性。
在Struts1中,验证框架是处理用户输入数据校验的重要组成部分,它帮助开发者确保用户提交的数据符合预定义的规则,从而提高应用程序的安全性和用户体验。下面将详细介绍Struts1验证框架的使用。 首先,我们来看一下...
(2):对密码校验的规则是用户不能为空,且只能是数字,长度为8到20之间。 (3):年龄的校验规则是必须是整数,且在1到120之间。 (4):生日的校验规则是必须在1950-1-1到1990-1-1之间。 (5):所有提示信息均要...
总的来说,Struts2的校验框架通过提供灵活的配置和易于扩展的机制,使得Web应用的输入验证变得简单而有效。它可以帮助开发者避免因用户输入不合法而导致的程序错误,提升应用的用户体验,同时增强系统的稳定性和安全...
Struts2验证框架是Java开发中的一个关键组件,主要用于处理Web应用中的用户输入验证。它提供了灵活且强大的机制,确保用户提交的数据符合预期格式和业务规则。Struts2的验证框架是基于Action类和XML配置文件的,可以...