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的格式,我们需要可以将默认文档进行更改。参考:
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 表单处理的更多相关文章
- 12、Struts2表单重复提交
什么是表单重复提交 表单的重复提交: 若刷新表单页面, 再提交表单不算重复提交. 在不刷新表单页面的前提下: 多次点击提交按钮 已经提交成功, 按 "回退" 之后, 再点击 &qu ...
- struts2表单验证
1:采用手工编写代码实现. 通过继承ActionSupport类,然后重写vlidate方法,validate方法会校验跟execute同样签名的方法,当某个数据校验失败时,我们应该调用addFiel ...
- struts2表单提交的乱码的问题的解决
今天碰到一乱码问题,百思不得其解. 最后解决办法是设置了表单的提交方式,将method设置为post,解决问题.虽然默认的提交方式是post.但是如果不显式设置的话,就会出现我所出现的问题. 总结下处 ...
- struts2表单提交Date数据无法接收
问题:在Struts2环境下,提交含有Date类型数据表单,但是在action中没有接收到:String就可以直接接收到: --网络搜索后,说Struts2可以自己转,但是目前没发现有: 然后在狂搜, ...
- Struts2 - 表单的重复提交问题
用户重复提交表单在某些场合将会造成非常严重的后果.例如,在使用信用卡进行在线支付的时候,如果服务器的响应速度太慢,用户有可能会多次点击提交按钮,而这可能导致那张信用卡上的金额被消费了多次.因此,重复提 ...
- struts2表单提单细节处理
1. 上传文件 大部分项目避免不了要上传文件. struts2提供了封闭的上传文件的入口, 网络上也存在大量的插件用于网页表单中上传文件. 由于自己习惯用SSH框架, 所以介绍一下struts2中文件 ...
- 【转】Struts2 表单验证与验证框架
版权声明:好笔头不如烂记性 https://blog.csdn.net/zsbgood/article/details/81114038 表单数据验证是很常见的功能,通常前端页面会有一次 js验证,但 ...
- [JavaWeb基础] 015.Struts2 表单验证框架
在web开发的过程中,我们经常要用到一些填写表单的操作,我们一般都要在提交表单信息的时候对表单的内容进行验证,struts2给我们提供了简单的实现接口,让我们可以很容易的对表单进行验证.下面讲解下最传 ...
- Struts2 表单提交与execute()方法的结合使用
1.创建web项目,添加struts2支持的类库,在web.xml中配置struts2过滤器. 2.创建名为UserAction的Action对象,并在其中编写execute()方法,代码如下所示: ...
随机推荐
- 修改win8系统中启动管理器的系统引导信息
最近用某软件做了个启动U盘,软件安装在电脑上,启动盘很快做完了,结果重启电脑的时候发现悲剧,windows启动后会显示出一个系统引导菜单,显示有3秒倒计时但是倒计时结束依然不能自动进入系统.. 然后. ...
- 有关sybase的一些零星经验
clear transaction log >dump transaction master with truncate_only >dump transaction master wit ...
- NodeJS加MongoDB应用入门
OS:Windows 7 1.下载安装MongoDB:http://www.mongodb.org/downloads 2.下载安装NodeJS:http://nodejs.org/ 3.运行Mong ...
- Visual Studio Code扩展
Visual Studio Code扩展 注:本文提到的代码示例下载地址>How to create a simple extension for VS Code VS Code 是微软推出的一 ...
- Swift -- SnapKit
Snapkit SnapKit是专门为Swift语言提供AutoLayout布局使用的,特点为语法简洁易用. let subview = UIView() subview.backgroundColo ...
- iOS -一些常用的方法
1.获取本地的语言 + (NSString *)getLocalLanguage { NSString *language = [[[NSUserDefaults standardUserDefaul ...
- ALV 行列 颜色
1)颜色含义 1:海蓝:2:浅清:3:黄色:4:浅蓝:5:青色:6:红色:7:橙色.(1)首位为主颜色:(2)次位为辅助颜色:(3)末位为0时,表示首位数字表为表格的底色:末位为1时,则表示以1为底色 ...
- 《转》SQL Server 2008 数据维护实务
SQL Server 2008 数据维护实务 http://blog.csdn.net/os005/article/details/7739553 http://www.cnblogs.com/xun ...
- IntelliJ IDEA Subversion的使用方式
接着一直点下一步基本上就可以了
- [转贴]C++开源库
C++在“商业应用”方面,曾经是天下第一的开发语言,但这一 桂冠已经被java抢走多年.因为当今商业应用程序类型,已经从桌面应用迅速转移成Web应 用.当Java横行天下之后,MS又突然发力,搞出C# ...