ongl(示例3-6 多值类型的数据处理)

使用ognl 实现多值处理,处理的值比较多,如数组,集合等类型的数据

//实体类省略

//创建action,其中包括两个成员变量 分别是两个double,string类型的数组

package cn.jbit.action;

import com.opensymphony.xwork2.ActionSupport;

public class ArraysDataTransferAction extends ActionSupport {
    private String[] hobbies;
    private Double[] numbers=new Double[3];

    public String execute(){
        System.out.println("hobbies的长度是"+hobbies.length);
        for(int i=0;i<hobbies.length;i++){
            System.out.println("hobbies数组中第"+i+"个元素是:"+hobbies[i]);
        }
        System.out.println("numbers的长度是"+numbers.length);
        for(int i=0;i<numbers.length;i++){
            System.out.println("numbers数组中第"+i+"个元素是:"+numbers[i]);
        }

        return SUCCESS;
    }
    public String[] getHobbies() {
        return hobbies;
    }
    public void setHobbies(String[] hobbies) {
        this.hobbies = hobbies;
    }
    public Double[] getNumbers() {
        return numbers;
    }
    public void setNumbers(Double[] numbers) {
        this.numbers = numbers;
    }
}

//再次创建另外一个action,ListDataTransferAction

package cn.jbit.action;

import com.opensymphony.xwork2.ActionSupport;
import cn.jbit.bean.*;
import java.util.*;

public class ListDataTransferAction extends ActionSupport {
    private List<String> hobbies;
    private List<Double> numbers;
    private List<User> users;

    public String execute(){
        System.out.println("hobbies的长度是"+hobbies.size());
        for(int i=0;i<hobbies.size();i++){
            System.out.println("hobbies数组中第"+i+"个元素是:"+hobbies.get(i));
        }
        System.out.println("numbers的长度是"+numbers.size());
        for(int i=0;i<numbers.size();i++){
            System.out.println("numbers数组中第"+i+"个元素是:"+numbers.get(i));
        }
        System.out.println("users的长度是"+users.size());
        for(int i=0;i<users.size();i++){
            System.out.println("users数组中第"+i+"个元素是:"+users.get(i).getName());
        }
        return SUCCESS;
    }
    public List<String> getHobbies() {
        return hobbies;
    }
    public void setHobbies(List<String> hobbies) {
        this.hobbies = hobbies;
    }
    public List<Double> getNumbers() {
        return numbers;
    }
    public void setNumbers(List<Double> numbers) {
        this.numbers = numbers;
    }
    public List<User> getUsers() {
        return users;
    }
    public void setUsers(List<User> users) {
        this.users = users;
    }

}
package cn.jbit.action;

import com.opensymphony.xwork2.ActionSupport;
import cn.jbit.bean.*;
import java.util.*;

public class ListDataTransferAction extends ActionSupport {
    private List<String> hobbies;
    private List<Double> numbers;
    private List<User> users;

    public String execute(){
        System.out.println("hobbies的长度是"+hobbies.size());
        for(int i=0;i<hobbies.size();i++){
            System.out.println("hobbies数组中第"+i+"个元素是:"+hobbies.get(i));
        }
        System.out.println("numbers的长度是"+numbers.size());
        for(int i=0;i<numbers.size();i++){
            System.out.println("numbers数组中第"+i+"个元素是:"+numbers.get(i));
        }
        System.out.println("users的长度是"+users.size());
        for(int i=0;i<users.size();i++){
            System.out.println("users数组中第"+i+"个元素是:"+users.get(i).getName());
        }
        return SUCCESS;
    }
    public List<String> getHobbies() {
        return hobbies;
    }
    public void setHobbies(List<String> hobbies) {
        this.hobbies = hobbies;
    }
    public List<Double> getNumbers() {
        return numbers;
    }
    public void setNumbers(List<Double> numbers) {
        this.numbers = numbers;
    }
    public List<User> getUsers() {
        return users;
    }
    public void setUsers(List<User> users) {
        this.users = users;
    }

}

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.custom.i18n.resources" value="message"/>     -->
    <package name="default" extends="struts-default">
        <action name="ArraysDataTransfer" class="cn.jbit.action.ArraysDataTransferAction">
            <result name="success">result2.jsp</result>
        </action>
        <action name="listDataTransfer" class="cn.jbit.action.ListDataTransferAction">
            <result>result2.jsp</result>
        </action>

    </package>
</struts>

首先需要做的是接受数据,创建出表单数据;

array_input.jsp和list_input.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP ‘index.jsp‘ starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>

  <body>
    <s:form action="ArraysDataTransfer.action">
        <s:textfield name="hobbies" label="爱好:"/>
        <s:textfield name="hobbies" label="爱好:"/>
        <s:textfield name="hobbies" label="爱好:"/>

        <s:textfield name="numbers[0]" label="数字:"/>
        <s:textfield name="numbers[1]" label="数字:"/>
        <s:textfield name="numbers[2]" label="数字:"/>
        <s:submit value="提交"/>
    </s:form>
  </body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP ‘index.jsp‘ starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>

  <body>
    <s:form action="listDataTransfer">
        <s:textfield name="hobbies" label="爱好:"/>
        <s:textfield name="hobbies" label="爱好:"/>
        <s:textfield name="hobbies" label="爱好:"/>

        <s:textfield name="numbers[0]" label="数字:"/>
        <s:textfield name="numbers[1]" label="数字:"/>
        <s:textfield name="numbers[2]" label="数字:"/>

        <s:textfield name="users.name" label="姓名:"/>
        <s:textfield name="users.name" label="姓名:"/>
        <s:textfield name="users.name" label="姓名:"/>
        <s:submit value="提交"/>
    </s:form>
  </body>
</html>

之后分别访问http://localhost:8080/Struts2_OGNL/ArraysDataTransfer和http://localhost:8080/Struts2_OGNL/listDataTransfer

				
时间: 2024-08-01 10:46:42

ongl(示例3-6 多值类型的数据处理)的相关文章

[转] 值类型与引用类型(下)

本文将介绍以下内容: 类型的基本概念 值类型深入 引用类型深入 值类型与引用类型的比较及应用 [下载]:[类型示例代码] 1. 引言 值类型与引用类型的话题经过了两个回合([第八回:品味类型---值类型与引用类型(上)-内存有理]和[第九回:品味类型---值类型与引用类型(中)-规则无边])的讨论和切磋,我们就基本的理解层面来说已经差不多了,但是对这一部分的进一步把握和更深刻的理解还要继续和深化,因为我自己就在两篇发布之际,我就得到装配脑袋兄的不倦指导,之后又查阅了很多的资料发现类型在.NET或

Structs vs classes(值类型vs引用类型)

我们知道classes是引用类型,structs属于值类型.这就意味着,当你传递一个class,Swift传递的是对象的引用,而当你传递一个struct,Swift传递的是对象的值. 在playground写下如下代码,看看它的输出及其效果. Structs vs classes 上面分别定义了一个结构体一个类,它们都只有一个变量.代码分别生成一个struct和class,并保存它们至相应的变量中,然后分别赋值它们至第二个变量,最后代码改变了第二个变量的属性. 我们可以发现,在struct示例中

引用类型与值类型在编码上的区别

一.引入类型与值类型简介 值类型:直接存放于栈中,取的时候是直接取得值.值类型继承自System.ValueType.(自定义对象) 引用类型:存在于托管堆中,取的时候取的是该对象的地址,然后用这个地址去托管堆中取值.引用类型继承自System.Object.(int,bool) 二.在代码编写上的区别 在赋值的时候,值类型是复制一份,新的和旧的在以后的操作中互不影响,而引用类型复制的只是地址,在以后的修改中,修改新的旧的也会受到影响. 代码示例: static void Main(string

20151024_001_C#基础知识(静态与非静态的区别,值类型和引用类型,堆和栈的区别,字符串的不可变性,命名空间)

1:我们把这些具有相同属性和相同方法的对象进行进一步的封装,抽象出来类这个概念. 类就是个模子,确定了对象应该具有的属性和方法. 对象是根据类创建出来的. 2:类:语法 [public] class 类名 { 字段; 属性; 方法; } 写好了一个类之后,我们需要创建这个类的对象,那么,我们管创建这个类的对象过程称之为类的实例化.使用关键字new 实例化类===创建类 this:表示当前这个类的对象. 类是不占内存的,而对象是占用内存的. 结构是面向过程的,类是面向对象的,之前没有面向对象的时候

.NET中六个重要的概念:栈、堆、值类型、引用类型、装箱和拆箱 (转)

作者: Edison Chou  来源: 博客园  发布时间: 2014-09-03 15:59  阅读: 318 次  推荐: 2   原文链接   [收藏] 原文作者:Shivprasad koirala 英文原文:Six important .NET concepts: Stack, heap, value types, reference types, boxing, and unboxing 一.概述 本文会阐述六个重要的概念:堆.栈.值类型.引用类型.装箱和拆箱.本文首先会通过阐述当

.NET中的六个重要概念:栈、堆、值类型、引用类型、装箱和拆箱

内容导读 概述 当你声明一个变量背后发生了什么? 堆和栈 值类型和引用类型 哪些是值类型,哪些是引用类型? 装箱和拆箱 装箱和拆箱的性能问题 一.概述 本文会阐述六个重要的概念:堆.栈.值类型.引用类型.装箱和拆箱.本文首先会通过阐述当你定义一个变量之后系统内部发生的改变开始讲解,然后将关注点转移到存储双雄:堆和栈.之后,我们会探讨一下值类型和引用类型,并对有关于这两种类型的重要基础内容做一个讲解. 本文会通过一个简单的代码来展示在装箱和拆箱过程中所带来的性能上的影响,请各位仔细阅读. 二.当你

6个重要的.NET概念栈,堆,值类型,引用类型,装箱,拆箱

介绍 这篇文章将解释6个重要的概念:栈,堆,值类型,引用类型,装箱,拆箱.本文将会阐述当你声明一个变量时发生了什么并提前说明两个重要个概念:栈和堆.文章将围绕引用类型和值类型澄清一些重要基本信息.并通过一个简单的示例来演示装箱和拆箱引起的性能损失. 声明一个变量时发生了什么? 当你在.NET应用程序中声明了一个变量时,将会从RAM中分配一小块内存,在内存中存在三样东西:变量名称,数据类型和变量的值. 我们简单的说明下在内存中发生了什么,要知道变量在内存中的分配是取决于数据类型的.这里存在两种类型

java中值类型和引用类型的不同实例(一)

简单分类,java中除了值类型就是对象.值类型就是java中的基本类型,而除了这些基本类型都是对象. [内存] “一个具有值类型(value type)的数据存放在栈内的一个变量中.即是在栈中分配内存空间,直接存储所包含的值,其值就代表数据本身. 值类型的数据具有较快的存取速度. 一个具有引用类型(reference type)的数据并不驻留在栈中,而是存储于堆中.即是在堆中分配内存空间,不直接存储所包含的值,而是指向所要存储的值,其值代表的是所指向的地址.当访问一个具有引用类型的数据时,需要到

值类型与引用类型作为参数输出的效果

public  static void Hello()        {            //SampleRefType sa = new SampleRefType();            //sa.value = 44;            int sss = 7;            World(sss);            Console.WriteLine(sss);            Console.ReadKey();        }