zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    保持URL不变和数字验证
    centOS ftp key?
    本地环境测试二级域名
    linux 解决You don't have permission to access 问题
    php smarty section loop
    php header Cannot modify header information headers already sent by ... 解决办法
    linux部分命令
    Linux 里面的文件操作权限说明
    用IT网络和安全专业人士视角来裁剪云的定义
    SQL Server 2008 R2炫酷报表"智"作有方
  • 原文地址:https://www.cnblogs.com/klguang/p/4896150.html
Copyright © 2011-2022 走看看