j2ee之struts2表单细节处理

/struts-tags中自带了很多标签

比如一个简单的登录表单,其中自带了很多的样式,实际上如果你不需要用到struts的实际功能的时候不建议使用

     <s:form   action="user_save">
          <s:token></s:token>
              <s:textfield name="username" label="用户名"></s:textfield>
              <s:textfield name="pwd" label="密码"></s:textfield>
              <s:submit value="提交"></s:submit>
         </s:form>

你可以通过设置属性 theme="simple"来取消他自带的样式

其次是ModelDriven,意思是直接把实体类当成页面数据的收集对象。在Action实现ModelDriven接口,可以很方便的对实体类对象的属性赋值,不过在Action中实体类对象要new出来并且重写ModelDriven的getModel方法,返回值是你的实体类对象代码如下:

package com.xinzhi.action;

import java.util.List;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.util.ValueStack;
import com.xinzhi.dao.impl.UserDaoImpl;
import com.xinzhi.entity.UserEntity;

public class UserAction extends ActionSupport implements
        ModelDriven<UserEntity> {
    private static final long serialVersionUID = 1L;
    private UserEntity userEntity = new UserEntity();
    UserDaoImpl userDaoImpl = new UserDaoImpl();

    public UserEntity getUserEntity() {
        return userEntity;
    }

    public void setUserEntity(UserEntity userEntity) {
        this.userEntity = userEntity;
    }

    public UserEntity getModel() {
        return userEntity;
    }

}

然后是表单的数据回显,在Action当中把你的实体类对象压入(ValueStack)堆栈中,然后在页面中取出堆栈你要的值,方法如下

  public String view() {
        UserEntity selectAUserEntity = userDaoImpl.selectAUserEntity(userEntity
                .getId());
        ValueStack valueStack = ActionContext.getContext().getValueStack();
        valueStack.pop();
        valueStack.push(selectAUserEntity);
        return "view";
    }

最后是防止表单重复提交的方法token,我对他的理解是,在表单中如果有<token>标签的时候,提交表单的同时在表单页和action中随机生成一个相同的ID值,当第一次提交过来的表单被接收时这个ID将被删除,当被重复提交时就会找不到对应的ID值导致无法重复提交,并且发出无效指令的错误代码如下

表单代码

      <s:form   action="user_save">
            <s:token></s:token>
              <s:textfield name="username" label="用户名"></s:textfield>
              <s:textfield name="pwd" label="密码"></s:textfield>
              <s:submit value="提交"></s:submit>
          </s:form>

然后要在struts.xml配置文件中使用对应的拦截器,并指出重复提交时,无效的指令将会跳转到哪一个页面代码如下:

     <action name="user_*" class="com.xinzhi.action.UserAction" method="{1}">
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <interceptor-ref name="token">
                <param name="includeMethods">save</param>
            </interceptor-ref>
        </action>
时间: 2024-10-23 04:38:37

j2ee之struts2表单细节处理的相关文章

struts2表单提单细节处理

1. 上传文件 struts2提供了封闭的上传文件的入口, 或者网络上存在大量的插件用于网页表单中上传文件. struts2对文件上传的格式,及上传文件的大小有很好的限制. <s:file cssClass="doc" name="documents[0].actionFile" /> 这样上传的文件会自动map到对象的属性上, 或者我们使用File []fileArray来预存表单提交到action的文件队列. 不过通过此方法上传的文件队列是没有文件类

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

在web开发的过程中,我们经常要用到一些填写表单的操作,我们一般都要在提交表单信息的时候对表单的内容进行验证,struts2给我们提供了简单的实现接口,让我们可以很容易的对表单进行验证.下面讲解下最传统的方法配置表单验证框架,还有更简单明了的就是利用注解,这里就不解释了. 1.首先我们要在要进行配置的Action的同级目录下,新建一个.xml文件,命名格式为:ActionClassName-validation.xml. 例如我的Action类名为:RegisterAction   那么xml名

struts2表单验证-原理加基本用法

struts2的表单验证有两种方式[两种方式都是同一个数据验证拦截器(validate)在作用]: 1.手工验证:自己手动写一个validate()方法,实现数据验证. 前提:此action继承ActionSupport或者实现Validateable, ValidationAware接口 该方法中,写数据检查代码,如果有错误就把错误信息添加到值栈中.当值栈中的错误信息不为空,struts2会自动返回一个input的结果 validate()对Action里的全部方法做数据校验 如果只想对Act

(二十二)Struts2 表单标签

表单标签列表是Struts UI标签的子集.这些标签有助于渲染Struts Web应用程序所需的用户界面,主要分为三类,本章将介绍这三种类型的UI标签: 简单UI标签 我们其实已经在前面的示例中使用了这些标签,接下来将在本章中重新回顾一下.以下是一个简单的视图页面email.jsp与几个简单的UI标签: <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncodi

Struts2 表单标签

form 标签的列表是Struts的UI标签的一个子集.这些标签可以帮助渲染中需要Struts Web应用程序和用户界面可以分为三类.本章将带你通过所有三种类型的UI标签: 简单UI标签: 我们已经使用这些标签已经在我们的例子中.让我们来看看一个简单的一些简单UI标签的视图页面email.jsp: <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding=

Struts2表单提交的中文字符数据用hibernate存储在数据库中是乱码的问题。

1.先检查中文字符出现乱码的位置,于是就在action中用printf方法打印表单提交的中文数据到控制台,发现是乱码. 2.于是问题就转换成了先解决jsp表单提交的中文数据到action中出现乱码的问题, 3.百度了一下,发现是因为我的struts.xml文件建立的时候直接在网上copy的模板,encoding属性设置的是UTF-8我忽略了,而我jsp的encoding属性设置的是gbk,导致两者不一致(因为之前入门的时候教程里面讲的就是gbk方式,于是我也沿用了这种方式.)我eclipse的文

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

1.创建web项目,添加struts2支持的类库,在web.xml中配置struts2过滤器. 2.创建名为UserAction的Action对象,并在其中编写execute()方法,代码如下所示: package com.wh.Demo; import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport { private String info; public String

struts2表单批量提交

<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%> <%@ taglib prefix="s" uri="/struts-tags" %> <%@ taglib prefix="sx" uri="/struts-dojo-tags"%> <%@ taglib p

后台验证及struts2表单验证里field-validator type值的含义?

http://lovehui0228.iteye.com/blog/592808   后台验证 int 整数:double 实数:date 日期:expression  两数的关系比较: email Email地址:urlvisitorconversion regex 正则表达式验证:required 是否为空:requiredstring 必须字符:stringlength 输入字符长度限制;答案补充 url web地址 visitor 访问 conversion 转换 <validators