0 0

struts2中Action怎样获取动态表单中的多行数据15

 一: struts-config.xml 配置

<struts-config>
  <form-beans>
    <form-bean name="trafficForm" type="com.ccit.safetm.controller.traffic.TrafficForm"></form-bean>
  </form-beans>
  <action-mappings>
    <action path="/traffic/addTraPolicy" type="com.ccit.safetm.controller.traffic.AddTraPolicyAction" name="trafficForm"  scope="request">
	<forward name="success" path="/jsp/success.jsp"></forward>
	<forward name="error" path="/jsp/error.jsp"></forward>
	</action>
  </action-mappings>
</struts-config>

二: 输入页面 add_traffic_policy.jsp

 
<%@ page language="java" import="java.util.*"
	contentType="text/html; charset=utf-8" isELIgnored="false"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<base href="<%=basePath%>" />
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>添加流量监控策略</title>
		<link href="<%=request.getContextPath()%>/css/css_blue.css"
			rel="stylesheet" type="text/css" id="cssStyle" />

		<script type="text/javascript"
			src="<%=request.getContextPath()%>/js/judge.js"></script>
		<script type="text/javascript"
			src="<%=request.getContextPath()%>/js/jquery-1.2.6.js"></script>
		<script type="text/javascript"
			src="<%=request.getContextPath()%>/js/jquery-1.3.2.min.js"></script>
		<script type="text/javascript"
			src="<%=request.getContextPath()%>/js/jquery.cookie.js"></script>

		<script type="text/javascript">
        $(document).ready(function() {
            $('#btnAdd').click(function() {
                var num     = $('.clonedInput').length; // how many "duplicatable" input fields we currently have
                var newNum  = new Number(num + 1);      // the numeric ID of the new input field being added
  
                // create the new element via clone(), and manipulate it's ID using newNum value
                var newElem = $('#input' + num).clone().attr('id', 'input' + newNum);
  
                // manipulate the name/id values of the input inside the new element
               //  newElem.children(':first').attr('id', 'name' + newNum).attr('name', 'name' + newNum);
                 
                newElem.children(':first').attr('id', 'user['+ newNum + ']day' ).attr('name', 'user['+ newNum + ']day' );
                newElem.children(':next').attr('id', 'user['+ newNum + ']per' ).attr('name', 'user['+ newNum + ']per' );
                newElem.children(':last').attr('id', 'user['+ newNum + ']content' ).attr('name', 'user['+ newNum + ']content' );
                            
                // insert the new element after the last "duplicatable" input field
                $('#input' + num).after(newElem);
  
                // enable the "remove" button
                $('#btnDel').attr('disabled','');
  
                // business rule: you can only add 5 names
                if (newNum == 5)
                    $('#btnAdd').attr('disabled','disabled');
            });
  
            $('#btnDel').click(function() {
                var num = $('.clonedInput').length; // how many "duplicatable" input fields we currently have
                $('#input' + num).remove();     // remove the last element
  
                // enable the "add" button
                $('#btnAdd').attr('disabled','');
  
                // if only one element remains, disable the "remove" button
                if (num-1 == 1)
                    $('#btnDel').attr('disabled','disabled');
            });
  
            $('#btnDel').attr('disabled','disabled');
        });
    </script>


	</head>
	<body class="main_bg">
		<html:form method="post" action="/traffic/addTraPolicy.do">
			<table width="90%" border="0" align="center" cellpadding="0"
				cellspacing="0">
				<tr>
					<td width="1%" height="33"
						background="<%=request.getContextPath()%>/images/main_02.gif">
						<img src="<%=request.getContextPath()%>/images/main_01.gif"
							width="9" height="33" />
					</td>
					<td width="3%" height="33"
						background="<%=request.getContextPath()%>/images/main_02.gif">
						<img src="<%=request.getContextPath()%>/images/main_03.gif"
							width="18" height="17" />
					</td>
					<td width="96%"
						background="<%=request.getContextPath()%>/images/main_02.gif"
						class="text10">
						添加流量监控策略
					</td>
				</tr>
			</table>

			<br />
			<table class="admintable" width="90%" border="0" align="center"
				cellpadding="4" cellspacing="0" bgcolor="#cde6f6">

				<tr>
					<td>
						<div id="input1" style="margin-bottom:4px;" class="clonedInput">
							提醒日:
							<input type="text" name="traffics[0].checkDay" id="traffics[0].checkDay" />
							提醒百分比:
							<input type="text" name="traffics[0].warnPercent" id="traffics[0].warnPercent" />
							推送消息内容:
							<input type="text" name="traffics[0].warnContent" id="traffics[0].warnContent" />
						</div>
					</td>
					<td>
						<div>
							<input type="button" id="btnAdd" value="添加策略" />
							<input type="button" id="btnDel" value="移除策略" />
						</div>
					</td>
				</tr>


				<tr>
					<td height="25" colspan="4" align="center" bgcolor="#FFFFFF">
						<input type="submit" value="提交" />
					</td>
				</tr>
			</table>

		</html:form>
	</body>

</html>
 

 

三: TrafficForm的关键代码

public class TrafficForm extends BaseActionForm implements Serializable {
	private static final long serialVersionUID = 454397279205151336L;

	private List traffics = new AutoArrayList(Traffic.class);

	public List getTraffics() {
		return traffics;
	}

	public void setTraffics(List traffics) {
		this.traffics.clear();
		this.traffics.addAll(traffics);
	}

	
}

 

四.bean,提问页面省略了get set方法

public class Traffic extends BaseActionForm implements Serializable {
	private static final long serialVersionUID = 454397279205151336L;
	
	/**
	 * Fields
	 */
	private Integer policyId;
	private Integer checkDay;
	private Integer warnPercent;
	private String warnContent;

	/** default constructor */
	public Traffic() {
	}

	/** full constructor */
	public Traffic(Integer policyId, Integer checkDay, Integer warnPercent, String warnContent) {
		super();
		this.policyId = policyId;
		this.checkDay = checkDay;
		this.warnPercent = warnPercent;
		this.warnContent = warnContent;
	}

       

五. 自定义的 AutoArrayList

public class AutoArrayList extends ArrayList implements Serializable {

	private static final long serialVersionUID = 1L;
	private Class itemClass;

	public AutoArrayList(Class itemClass){
		this.itemClass = itemClass;
	}
	
	public Object get(int index){
		try {
			while(index >= size()){
				add(itemClass.newInstance());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return super.get(index);
	}
}

 

六.AddTraPolicyAction

TrafficForm trafficForm = (TrafficForm)form;
			List traffics = trafficForm.getTraffics();
			System.out.println("traffics.size():"+traffics.size());
			for (int i = 0; i < traffics.size(); i++) {
				Traffic traffic = (Traffic) traffics.get(i);
				System.out.println("Traffic["+i+"]CheckDay:"+traffic.getcheckDay()+" WarnPercent:"+traffic.getWarnPercent()+" WarnContent:"+traffic.getWarnContent());
			}
			
			
//			Integer checkDay = trafficForm.getcheckDay();
//			Integer warnPercent = trafficForm.getWarnPercent();
//			String warnContent = trafficForm.getWarnContent();
//			System.out.println("checkDay:"+checkDay);
//			System.out.println("warnPercent:"+warnPercent);
//			System.out.println("warnContent:"+warnContent);
//			

//			String[] days = request.getParameterValues("day");
//			String[] pers = request.getParameterValues("per");
//			String[] contents = request.getParameterValues("content");
//			System.out.println("测试day数组元素个数"+days.length);
//			System.out.println("测试pers数组元素个数"+pers.length);
//			System.out.println("测试contents数组元素个数"+contents.length);
			
//			while(request.getParameterNames().hasMoreElements()){
//			    String day=(String)request.getParameterNames().nextElement();
//			    String value=request.getParameter(day);
//			    System.out.println("测试name:"+day+",它的值是:"+value);
//			}

 

在action中测试,试过traffics的size总是1,总是只能获取表格中的第一行数据。也试过request.getParameterValues依然取不到其他行的数据,求解哪里有问题呢?附上我参考的页面

http://tech.ddvip.com/2008-12/122881555798671_2.html

 

 
2014年5月13日 10:55
  • 大小: 32.6 KB

2个答案 按时间排序 按投票排序

0 0

采纳的答案

ActionForm里面的属性换成数组,不就可以获取同name的所有值了吗,然后再java里面的for循环
public class Traffic extends BaseActionForm implements Serializable {  
    private static final long serialVersionUID = 454397279205151336L;  
      
    private Integer[] policyId;  
    private Integer[] checkDay;  
    private Integer[] warnPercent;  
    private String[] warnContent;  

2014年5月13日 11:11
0 0

你这代码只有一行数据吧
<div id="input1" style="margin-bottom:4px;" class="clonedInput"> 
                            提醒日: 
                            <input type="text" name="traffics[0].checkDay" id="traffics[0].checkDay" /> 
                            提醒百分比: 
                            input type="text" name="traffics[0].warnPercent" id="traffics[0].warnPercent" /> 
                            推送消息内容: 
                            <input type="text" name="traffics[0].warnContent" id="traffics[0].warnContent" /> 
                        </div> 
我估计你JS加一行的,那么第二行,是traffics[1]了,traffics[2],traffics[3]这样下去,你不会用的traffics[0]吧
<div id="input1" style="margin-bottom:4px;" class="clonedInput"> 
                            提醒日: 
                            <input type="text" name="traffics[1].checkDay" id="traffics[0].checkDay" /> 
                            提醒百分比: 
                            <input type="text" name="traffics[0].warnPercent" id="traffics[1].warnPercent" /> 
                            推送消息内容: 
                            <input type="text" name="traffics[0].warnContent" id="traffics[1].warnContent" /> 
                        </div> 

2014年5月13日 16:34

相关推荐

    struts中多行提交问题

    我们看到了一个名为`addrow`的JavaScript函数,该函数的主要作用是在DOM树中动态插入新的表格行,并为每一行生成多个输入框,这些输入框将被赋予特定的名称格式,以便在提交时能够正确地将数据映射到服务器端对应的...

    提交多行数据到Struts的ActionForm的List属性中

    它继承自org.apache.struts.action.ActionForm接口,并包含多个字段来存储表单中的数据。当用户提交表单时,Struts框架会自动将表单数据填充到ActionForm实例中。 为了提交多行数据,我们通常会在HTML页面中使用多...

    Struts2表单标签使用范例

    在Struts2中,表单标签是用于处理用户输入和展示数据的关键组件,它们使得视图层的构建更加简洁和高效。本示例将深入探讨Struts2的表单标签使用方法,帮助开发者更好地理解和应用这些标签。 首先,我们来了解一些...

    struts2 表单标签的使用

    在Struts2中,表单标签是用于构建用户界面的重要组件,它们帮助开发者创建交互式和动态的网页。这篇博客将深入探讨Struts2中的表单标签及其使用方法。 首先,我们需要理解Struts2表单标签的基本结构。通常,一个...

    struts2中文教程

    在Struts2中,模型由Action类表示,视图主要由JSP页面和Struts2的标签库构建,控制器由Struts2框架自身提供,通过拦截器链来处理请求并决定如何响应。 五、实战演练 学习Struts2时,建议通过实际项目练习来加深...

    Struts2案例翻译篇-Using Struts2 Tag

    在Struts2中,Tag库是其核心组件之一,极大地简化了视图层的开发,使得开发者可以更方便地创建动态网页。本篇将深入讲解如何在Struts2中使用Tag,以及它们在"HelloWorld"案例中的应用。 1. **Struts2 Tags介绍** ...

    struts2标签使用例子

    在Struts2框架中,标签库是其一大特色,它提供了丰富的自定义标签,使得开发者能够更加便捷地创建动态页面。这些标签极大地简化了JSP页面的编写,提高了代码的可读性和可维护性。 1. **Struts2核心标签库**: - `s...

    struts2-tags-API,struts2标签api

    OGNL(Object-Graph Navigation Language)是Struts2中用于数据绑定的语言,它允许在标签中直接访问Action对象的属性。例如,`&lt;s:property value="#session.user.name" /&gt;`就能显示会话中用户对象的姓名属性。 五、...

    struts2标签api

    Struts2标签API是Struts2框架中一个重要的组成部分,它提供了一系列的预定义标签,使得开发者能够更方便地在JSP页面中处理业务逻辑和展示数据。这些标签极大地简化了视图层的开发,提高了代码的可读性和可维护性。 ...

    struts2标签使用方法

    在Struts2中,标签库是其核心特性之一,它提供了一系列预定义的JSP标签,用于简化视图层的编码,提高代码的可读性和可维护性。下面我们将详细探讨Struts2标签的使用方法以及EL(Expression Language)表达式。 1. *...

    struts2 jar包 包含 标签

    s:form是Struts2中最常用的标签之一,用于创建HTML表单。它不仅可以生成表单元素,还可以绑定到Action类的属性,实现数据提交。例如: ```jsp &lt;s:form action="saveUser.action"&gt; 用户名" /&gt; 密码" /&gt; 保存" /...

    Struts2-2.3.24 Html帮助文档

    1. `&lt;s:textfield&gt;`:用于创建输入文本框,它可以与Struts2的Action类中的属性绑定,实现数据的自动封装。 2. `&lt;s:textarea&gt;`:创建多行文本输入区域,同样支持与Action属性的绑定。 3. `&lt;s:checkbox&gt;`和`...

    struts2标签库

    Struts2标签库是Java Web开发中非常重要的一个组件,它是Apache Struts2框架的核心特性之一,极大地简化了视图层的开发工作。Struts2的标签库提供了一系列的JSP标签,使得开发者能够更方便地创建动态网页,提高代码...

    struts2 UI标签

    在实际使用中,Struts2 UI标签与Struts2的拦截器(Interceptor)和Action配合,实现数据绑定、验证、结果转发等功能。通过`struts.xml`或`struts.properties`等配置文件,可以定制标签的行为,实现更灵活的视图逻辑...

    Struts2标签集锦(附Struts2标签详解word文档)

    在实际使用中,Struts2标签的灵活性和便利性体现在数据绑定上,它可以直接与Action类的属性进行交互,无需繁琐的EL表达式。例如,`&lt;s:textfield name="username"&gt;`会自动找到对应的Action中的`username`属性,并将...

    struts2表单标签(转) - 努力创造未来!

    在Struts2中,表单标签是用于处理用户输入数据的关键组件,极大地简化了视图与控制器之间的交互。本文将深入探讨Struts2的表单标签及其用法。 首先,Struts2的表单标签主要分为两种类型:简单表单标签(s:textfield...

    Struts2图书馆管理系统

    5. `&lt;s:select&gt;`:创建下拉选择框,可以从Action类中获取选项数据,也可以自定义选项。 6. `&lt;s:checkbox&gt;` 和 `&lt;s:radio&gt;`:用于创建复选框和单选按钮,可以进行多选或单选操作。 7. `&lt;s:iterator&gt;`:遍历集合,如...

    Struts2标签与开发手册

    本手册详细介绍了Struts2中的各种标签及其在开发过程中的应用。 1. **简介** Struts2的标签库分为核心标签库、展示标签库、OGNL标签库等,它们提供了丰富的功能,如数据校验、国际化、条件判断、循环遍历等。这些...

    struts2标签介绍

    Struts2标签是Java Web开发框架Struts2中的核心组件之一,它极大地简化了视图层的构建,提高了代码的可读性和维护性。在Struts2中,标签主要用于处理和展示数据,使得开发者能够更加专注于业务逻辑,而无需深陷于...

Global site tag (gtag.js) - Google Analytics