在这篇教程里我们将探究如何处理表单提交。本文例子介绍:

  • 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的格式,我们需要可以将默认文档进行更改。参考:

http://bbs.csdn.net/topics/300107242

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>

struts2 表单处理的更多相关文章

  1. 12、Struts2表单重复提交

    什么是表单重复提交 表单的重复提交: 若刷新表单页面, 再提交表单不算重复提交. 在不刷新表单页面的前提下: 多次点击提交按钮 已经提交成功, 按 "回退" 之后, 再点击 &qu ...

  2. struts2表单验证

    1:采用手工编写代码实现. 通过继承ActionSupport类,然后重写vlidate方法,validate方法会校验跟execute同样签名的方法,当某个数据校验失败时,我们应该调用addFiel ...

  3. struts2表单提交的乱码的问题的解决

    今天碰到一乱码问题,百思不得其解. 最后解决办法是设置了表单的提交方式,将method设置为post,解决问题.虽然默认的提交方式是post.但是如果不显式设置的话,就会出现我所出现的问题. 总结下处 ...

  4. struts2表单提交Date数据无法接收

    问题:在Struts2环境下,提交含有Date类型数据表单,但是在action中没有接收到:String就可以直接接收到: --网络搜索后,说Struts2可以自己转,但是目前没发现有: 然后在狂搜, ...

  5. Struts2 - 表单的重复提交问题

    用户重复提交表单在某些场合将会造成非常严重的后果.例如,在使用信用卡进行在线支付的时候,如果服务器的响应速度太慢,用户有可能会多次点击提交按钮,而这可能导致那张信用卡上的金额被消费了多次.因此,重复提 ...

  6. struts2表单提单细节处理

    1. 上传文件 大部分项目避免不了要上传文件. struts2提供了封闭的上传文件的入口, 网络上也存在大量的插件用于网页表单中上传文件. 由于自己习惯用SSH框架, 所以介绍一下struts2中文件 ...

  7. 【转】Struts2 表单验证与验证框架

    版权声明:好笔头不如烂记性 https://blog.csdn.net/zsbgood/article/details/81114038 表单数据验证是很常见的功能,通常前端页面会有一次 js验证,但 ...

  8. [JavaWeb基础] 015.Struts2 表单验证框架

    在web开发的过程中,我们经常要用到一些填写表单的操作,我们一般都要在提交表单信息的时候对表单的内容进行验证,struts2给我们提供了简单的实现接口,让我们可以很容易的对表单进行验证.下面讲解下最传 ...

  9. Struts2 表单提交与execute()方法的结合使用

    1.创建web项目,添加struts2支持的类库,在web.xml中配置struts2过滤器. 2.创建名为UserAction的Action对象,并在其中编写execute()方法,代码如下所示: ...

随机推荐

  1. bss段为什么需要初始化?

    我们都知道bss段需要初始化,但是这是为什么呢? 通过浏览资料,我们都会发现,bss段是不会出现在程序下载文件(*.bin *.hex)中的,因为全都是0.如果把它们出现在程序下载文件中,会增加程序下 ...

  2. 10款无限滚动自动翻页jquery插件

    2012年3月29日 无限滚动自动翻页可以说是web2.0时代的一项堪称伟大的技术,它让我们在浏览页面的时候只需要把滚动条拉到网页底部就能自动显示下一页的 结果,改变了一直以来只能通过点击下一页来翻页 ...

  3. BZOJ 1707: [Usaco2007 Nov]tanning分配防晒霜

    Description 奶牛们计划着去海滩上享受日光浴.为了避免皮肤被阳光灼伤,所有C(1 <= C <= 2500)头奶牛必须在出门之前在身上抹防晒霜.第i头奶牛适合的最小和最 大的SP ...

  4. BZOJ 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式

    Description 农夫John发现他的奶牛产奶的质量一直在变动.经过细致的调查,他发现:虽然他不能预见明天产奶的质量,但连续的若干天的质量有很多重叠.我们称之为一个"模式". ...

  5. poj 1273

    网络流之最大流的基础题: 可以使用dinic算法和EK算法: 分别对着模板敲了一遍: dinic: #include<cstdio> #include<cstring> #in ...

  6. 李洪强漫谈iOS开发[C语言-028]-逗号表达式

  7. 如何备份MySql的数据库

    如何备份MySql的数据库 应该说一般的数据库都有BackUp的需求, MySql备份数据库的方式很简单, 但是在网上说得云里雾里, 也应该是我对MySql数据库不熟悉.   目标(Target) : ...

  8. 解决wordpress上传的文件尺寸超过 php.ini 中定义的 upload_max_filesize 值。

    上传的文件尺寸超过 php.ini 中定义的 upload_max_filesize 值. 解决方法:修改/etc/php5/apache2/php.ini文件中的 post_max_size = 6 ...

  9. [转贴]C编译过程概述

    http://my.oschina.net/apeng/blog/105245 C 编译过程概述 目前Linux下最常用的C语言编译器是GCC(GNU Compiler Collection),它是G ...

  10. logstash date插件

    [elk@dr-mysql01 api-access]$ date Wed Nov 30 19:21:35 CST 2016 [elk@dr-mysql01 api-access]$ [elk@dr- ...