struts2 表单数据存储及校验处理

本教程我们介绍在提交表单时:javabean存储表单数据,在action中重写validate方法进行简单的校验,创建一个struts2表单并和javabean匹配
    
javabean存储表单数据

为了封装数据,我们将使用一个简单的Java类,它遵循基本的Java Bean规范,即为每个属性设置public get/set 方法。

Person.java

package model;

public class Person {
    private String firstName;
    private String lastName;
    private String email;
    private int age;
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person [firstName=" + firstName + ", lastName=" + lastName + ", email="
                + email + ", age=" + age + "]";
    }
}

注意上面的javabean:

年龄为int类型(action在讲表单参数填充到javabean中,会进行适当的类型转换)

复写了toString方法(<s:property>会调用toString方法)

action处理表单数据

action类需要继承ActionSupport,在Register类中我们申明一个属性personBean,并且提供相应的get/set方法。同时,在Register类中复写execute方法和validate方法。

execute方法:

默认实现不执行任何操作的返回"success"。子类应重写此方法以提供业务逻辑,并由此返回Action的预定义的返回值:SUCCESS、NONE 、ERROR、INPUT、LOGIN。

我们在Struts.xml中添加action元素时,需要定义这些返回值对应的页面(注:返回哪些写哪些)。

validate方法:

在Validatable接口中定义了一个validate()方法,重写该方法,如果建议表单输入域出现错误,则将错误添加到Actionsupport类的fieldErrors域中,然后通过OGNL表达式负责输出。

Register.java

package test.action;

import model.Person;
import com.opensymphony.xwork2.ActionSupport;

public class Register extends ActionSupport {
    private static final long serialVersionUID = 1L;
    private Person personBean;
    
    public String execute() throws Exception {

        // call Service class to store personBean's state in database

        return SUCCESS;
    }
    
    public void validate() {
        if (personBean.getFirstName().length() == 0) {
            addFieldError("personBean.firstName", "firstName is required");
        }
        if (personBean.getEmail().length() == 0) {
            addFieldError("personBean.email", "firstName is required");
        }
        if(personBean.getAge()<18){
            addFieldError("personBean.age", "Age is required and must be 18 or older");
        }
    }

    public Person getPersonBean() {
        return personBean;
    }

    public void setPersonBean(Person person) {
        personBean = person;
    }
}

jsp页面的struts2表单

表单维持和错误输出

用struts标签<s:form>进行表单维持和错误输出比较方便,但也因此生成了<table>的大量HTML代码。往往我们并不需要这些格式和代码,并且对这些标签的格式控制可能会增加我们的工作量。因此我们更改struts默认的主题,输出我们想要的效果。

struts2的主题和模板

struts2默认主题为XHTML,我们可以在struts.properties文件中修改struts2的默认主题。

struts.properties

struts.ui.theme=simple

表单书写格式

因为用了simple模板,就需要自己定义fielderror的显示。

格式为:<s:fielderror fieldName="XXX">并将此标签放在表单XXX字段之后。

fielderror默认主题是ul li的格式,我们需要可以将默认文档进行更改。

register.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'register.jsp' starting page</title>
</head>
<s:head />
<body>
    <h1>register</h1>
    <s:form action="register">
        firstName:<s:textfield name="personBean.firstName"></s:textfield>
                  <s:fielderror fieldName="personBean.firstName" /><br>
        lastName:<s:textfield name="personBean.lastName"></s:textfield>
                      <s:fielderror fieldName="personBean.lastName" /><br>
        email:<s:textfield name="personBean.email"></s:textfield>
              <s:fielderror fieldName="personBean.email" /><br>
        age:<s:textfield name="personBean.age"></s:textfield>
            <s:fielderror fieldName="personBean.age" /><br>
        <s:submit />
    </s:form>
</body>
</html>

显示结果的thankyou.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>   
    <title>My JSP 'thankyou.jsp' starting page</title>
  </head>
  <body>
    <p>Your registration information: <s:property value="personBean" /> </p>    
    <h3><s:text name="thankyou" /></h3>
  </body>
</html>

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>

    <constant name="struts.devMode" value="true" />
    <package name="basicstruts2" extends="struts-default">
        <action name="register" class="test.action.Register" method="execute">
            <result name="success">/thankyou.jsp</result>
            <result name="input">/register.jsp</result>
        </action>
    </package>
</struts>

时间: 2024-10-24 10:12:10

struts2 表单数据存储及校验处理的相关文章

JSP+Oracle表单数据存储处理方法

本文以Oracle数据库为例,介绍了在采用JSP技术开发WEB应用时一种简便通用的表单数据存储处理方法,以减轻开发工作量,同时提供了主要的程序代码. J2EE(Java 2 Enterprise Edition)技术已广泛应用在Web应用开发中,其中的JavaBean.Servlet技术为开发者提供了更为清晰的开发环境,使用JSP技术表现页面,使用Servlet技术完成大量的业务处理,使用Bean来存储数据及一些业务处理.在WEB应用中,业务数据存储到数据库中的处理工作经常很繁重,其中一种主要的

将HTML表单数据存储为XML格式

xml|数据 如你熟知ASP,XML和HTML4.0,请读下列示例 将表单数据存为XML格式 通常的,ASP中表单提交的数据一般被写入数据库.然而,如果你想让发送数据更为简便易行,那么,可以将它书写为XML文件格式.这种方式对于在web上收集的数据更为有用.因为XML对于所用平台来说非常的简便,所以用不着转换数据格式. 将提交的数据写为XML文档,则需要通过Microsoft XMLDOM Object创建一个新的XML文档.Microsoft XMLDOM Object拥有一个可扩展对象库,通

将HTML表单数据存储为XML格式(2)

xml|数据   文档被存档之后,如果你再打开这个文档,那么则会以如下代码列表形式出现:      MyXMLDoc.xml:      <?xml version="1.0"?>   <rootElement>   <childElement1 />   <childElement2 />   </rootElement>       在"MyXMLDoc.xml"文档中,childElement1 和

将HTML表单数据存储为XML格式(1)

xml|数据   XML和HTML4.0,请读下列示例      将表单数据存为XML格式       通常的,ASP中表单提交的数据一般被写入数据库.然而,如果你想让发送数据更为简便易行,那么,可以将它书写为XML文件格式.这种方式对于在web上收集的数据更为有用.因为XML对于所用平台来说非常的简便,所以用不着转换数据格式.       将提交的数据写为XML文档,则需要通过Microsoft XMLDOM Object创建一个新的XML文档.Microsoft XMLDOM Object拥

将HTML表单数据存储为XML格式(3)

xml|数据   如果你是在你自己的应用程序中使用以上代码,请谨记一件事情,在"ConvertFormtoXML"函数已经运行的情况下,如果XML文件名已经存在,那么,文件将会被覆盖.在此,我建议在使用"ConvertFormtoXML"功能前,最好用随机建立的文件名.这样,就将有价值数据被改写的风险降为零.       关于XML文件的产生,举例如下:      Contact.xml      <?xml version="1.0" ?

对于JSP中表单数据存储的一种通用方法

引言 J2EE(Java 2 Enterprise Edition)技术已广泛应用在Web应用开发中,其中的JavaBean.Servlet技术为开发者提供了更为清晰的开发环境,使用JSP技术表现页面,使用Servlet技术完成大量的业务处理,使用Bean来存储数据及一些业务处理.在WEB应用中,业务数据存储到数据库中的处理工作经常很繁重,其中一种主要的形式就是表单数据存储到数据库,整个应用处理过程牵涉到大量的这种数据存储操作,对每个表单都要单独编写相应的数据存储程序,花费了开发人员大量的时间和

JSP中表单数据存储的一种通用方法

  两种常见的表单数据存储处理方法 1.对每一表单都编写相应的程序代码 在JSP页面或JavaBean或Servlet中,使用request. getparameter()函数逐一提取表单提交的数据,或编写相应的JavaBean,使用setProperty方法将数据自动取到JavaBean中,然后生成SQL语句(insert,update,delete),最后执行executeupdate()函数完成数据表存储. 2.对每一数据表自动生成一个JavaBean程序代码 数据库系统必须支持用户能够读

在Struts 2.0中实现表单数据校验(Validation)

在写前几篇文章的时候,有些朋友建议我的写一篇关于表单数据校验的文章. 正如文章的开头所引用的<Writing Secure Code>的名言:"所有的输入都是罪恶的",所以我们应该对所有的外部输入进行校验.而表单是应用程序最简单的入口,对其传进来的数据,我们必须进行校验. 转换与校验(Conversion & Validation) 其实上篇文章,我本来是打算写表单数据校验的内容,但是经过再三思考后,还是决定先写Struts 2.0转换器的内容.原因是我认为转换是校

怎么实现jsp表单数据多次添加存储到session对象

问题描述 怎么实现jsp表单数据多次添加存储到session对象 如题,1.有一种HashMap的数据结构,key包含明星姓名 value是一个String的数组,包含了国籍.性别.年龄.粉丝数目.最拿手的歌.拍的最好的电影这些字符串数据. 2.编写addStar.jsp,可以通过表单增加一个明星的上述字段.点击提交按钮后,跳转到一个servlet程序中. 3.该servlet程序首先读取前一个页面表单的内容,并把信息存储在第一步的HashMap里,再将该对象存储在session作用域的属性内.