在 strust 中,我们可能经常要在 actionform 中使用其他 javabean 作为属性类型,这里就存在着如何使用好这些属性与 html form 之间的数据交换,下面我们就这些问题做一讲解。

如在用户注册界面中,我们通常会将用户的联系方式形成一个单独的新的 class ,如 contact ,包含以下属性:电话 (tel) ,手机 (cell) , email(email) , qq(qq) ,通信地址 (adress) 等等,这样条理也比较清晰,以下是这个 actionform 的部分代码:

public class registerform extends actionform

{

private integer id;

private string logonname;

private string realname;

private contact contact=new contact();

………..

}

在这里我们需要将 contact 实例化(在 reset 函数中需要重新实例化),这主要因为 struts 的机制:如我们将 html 的 form 元素(如 email )值传给 actionform , struts 需要执行的操作是 getcontact().setemail(string email) ,如果这时返回的 contact 对象为空的话,那么赋值如何进行,而且 struts 也不会知道如何去实例化 contact ,有时这些 javabean 的类型有可能是接口,实例化更是未知,所以关于 javabean 类型在 actionform 中的实例化,你需要自行完成,而且必须完成。至于在实际操作中判断 javabean 是否被进行过相关操作(不再是初始状态),你需要自行判断,其实也很简单,如可在 contact 类中编写一个函数检验一下即可。

actionform 创建完毕后,我们需要在 jsp form 中引用这些 javabean 类型的属性值,那就很简单啦,只需采用“ form 的属性名称”+“ . ”+“ javabean 中的属性名称”结构构成的名称付给相关元素即可。如:

通过这种方式我们就可以处理好 actionform 中的 javabean 类型的属性值了。

实际的情况可能更复杂些,我们有时可能要提交多行数据到后退,而且行内的数据是相关的,如我们需要提交多个用户的联系方式,这些行内的数据,如 email ,电话,手机,这些数据都是和用户编码相关的,现在我们修改一下 contact 类,添加一个用户编码 (userid) 属性,这时我们构建的 actionform 中可能需要一个列表数据( list )类型来处理这种情况。以下是这个 actionform 的部分代码:

public class modifybatchcontactform extends actionform

{

private list contact =new autoarraylist (contact.class);

…..

}

在以上代码中,我们同样处理了 list 类型数据的初始化。 struts 在给 list 中的对象赋值时,当然需要先获取 list 数据,然后在获取 list 中某一个对象(通过 index ),最后给对象赋值。在这里想我们可以更详细点分析浏览器端传过来数据,字段值形式如下: contact[0].email=linux_china@hotmail.com , struts 获取 actionform 中的 list 数据后,通过 index (此时为 0 )来获取 list 中封装的 javabean 对象,然而此时 list 是空的(尽管初始化了,但是没有数据),是无法取得封装的对象的,因此我们要在 struts 获取 list 中封装的对象的时候给它创建一个,这样就保证对象的获取和赋值的成功进行,所有我们新建一个 autoarraylist 类,继承 arraylist ,只要重写 get(int index) 方法即可,其实很简单,代码如下:

public class autoarraylist extends arraylist {

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);

}

}

这样我们就完成可以多行数据提交的 actionform 设计,这里还有点提醒,如果从浏览器端传过来的行索引是跳跃是的,如缺少中间行,而你不想要这些数据的话,且首尾行 index 相差很大的话,这种方式可能不太适合。这种多行提交形式比较适合对固定行的数据处理。如果行数不固定的话,你可以参考使用 mapform 方式实现。

下面我们就看看如何在 jsp 中使用这个 actionform ,其实只需要执行一个循环即可:

这里我们再讲解一下,代码中出现的“ contact ”(红色)都是 actionform 中的 list 数据类型变量名称,请确保一致,请不要更改名称,这也是方便提交到后台的数据接收。“ formname ”为在 struts-config 中声明的 actionform 名称。 indexed=”true” 可以确保生成的 html 元素的名称唯一,不要缺少这个声明。以上的 jsp 代码,你也可以使用 jstl 来完成,就看你习惯如何了。

通过以上步骤,我们完成了多行数据的提交所有环节,这样 struts 就会完成其他所有的事情,我们的代码逻辑和实现也简单多了。

总结:通过以上两个例子,相以信对 actionform 中使用 javabean 和 list 类型数据不会再陌生,同时使用 map 类型,这样可创建更好的 actionform 设计,关于 mapform ,请参考 http://www.jetmaven.net/documents/j_mapforminstruts.php 。不过引入这种方式后,在 validator 方面你可能要花点脑筋啦(如通过 xdoclet 生成 validator 文件可能功能不全),可能你需要手写一些代码来完成相关工作。

java list 赋值jsp,在Struts中使用JavaBean和List(多行数据)类型属性-JSP教程,Java技巧及代码...相关推荐

  1. java当中有关循环的代码_有关Java循环的内容,编程中还是比较常用的,下面分享给大家几个循环的示例代码,练习一下。1、循环输出1到100之间所有能被3或能被4整除的数。pack...

    有关Java循环的内容,编程中还是比较常用的,下面分享给大家几个循环的示例代码,练习一下. 1.循环输出1到100之间所有能被3或能被4整除的数. package com.hz.loop02; /** ...

  2. 写出一下Java方法对应的签名_Java中的方法签名是否包含其返回类型?

    Java类/接口中的方法签名是否包括其返回类型? 例: Java是否知道这两种方法之间的区别: public class Foo { public int  myMethod(int param) { ...

  3. JAVA 求出自然数101~199中的所有素数,每行显示10个数

    课后习题练习 2.2 编程求出自然数101~199中的所有素数,每行显示10个数 2.3 编程顺序输出1~100之间所有能被7整除的整数 2.2 int num = 0, flag = 1;int b ...

  4. Excel表格中如何合并同样名称的行数据

    这里介绍两种情况: 第一种:把行当中同样名称的相同数据合并 方法其实很简单:只需要使用[对齐方式]里面的[合并]即可 第二种:把行当中同样名称的不同数据合并 这里我们就需要借助数据透视表了 操作如下: ...

  5. java对象复制到另一个对象中_spring: beanutils.copyproperties将一个对象的数据塞入到另一个对象中(合并对象)...

    spring: beanutils.copyproperties将一个对象的数据塞入到另一个对象中(合并对象) 它的出现原因: BeanUtils提供对Java反射和自省API的包装.其主要目的是利用 ...

  6. java 密码提交前判断_JSP中如何写密码输入和核实密码时正确与否的Java判断代码?...

    jsp中判断两次输入的密码是否相同的方法是通过js实现的. 在两个文本框里添加onchange事件,在文本框的内容一发生变化时就触发该事件,而判断就写在这个事件之内就可以了. function che ...

  7. qt中的mysql能存入多少行数据_Qt中提高sqlite的读写速度(使用事务一次性写入100万条数据)...

    SQLite数据库本质上来讲就是一个磁盘上的文件,所以一切的数据库操作其实都会转化为对文件的操作,而频繁的文件操作将会是一个很好时的过程,会极大地影响数据库存取的速度.例如:向数据库中插入100万条数 ...

  8. excel WPS批量删除表格中某一列为空的行数据

    面试一点通丨模拟面试 模拟笔试,跳槽.升职.加薪.换更好工作必备微信小程序神器. 如下截图Excel,我们想删除E列为空的行数据(即黄颜色的行数据),如何批量操作呢: 1.鼠标左键选中E列. 2.键盘 ...

  9. 网站用户登录验证:Servlet+JSP VS Struts书剑恩仇录

    ? 什么是Struts框架 –从不同的角度看待Struts框架 –Struts框架的优点 ? 下载安装Struts框架 –下载配置Struts框架 –测试Struts框架 –安装Struts应用程序 ...

最新文章

  1. InfoQ趋势报告:架构和设计领域技术演变详解
  2. 2020-mb面试指南_2020年最佳代码面试准备平台
  3. Qt5的cmake文件位置
  4. 【Verilog HDL 训练】第 07 天(串并转换)
  5. linux 程序占内存,linux概念之程序占用内存
  6. Js弹性漂浮广告代码
  7. mysql events_mysql定时器Events
  8. 手把手教你webpack3(3)入口(多入口)entry
  9. java atomicinteger_Java多线程进阶(十三)—— J.U.C之atomic框架:AtomicInteger
  10. @builder注解_SpringBoot 整合SpringSecurity示例实现前后分离权限注解+JWT登录认证
  11. FB正在大规模重构React Native,预计今年发布
  12. RabbitMQ系列(七)--批量消息和延时消息
  13. Python 之 str 、 repr 、 反引号(``)的区别
  14. 设为首页 加入收藏 html,如何在网站上添加“设为首页”“加入收藏”
  15. 分享5个非常实用的电脑操作技巧,简单还很实用。
  16. nginx(二十七)长连接和短连接
  17. 一些关于coffeescript
  18. Latex在线简历制作
  19. 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用
  20. LTE网络有关系统消息(MIB/SIB)深度解析

热门文章

  1. java 通讯开发_java之接口开发-初级篇-socket通信
  2. redis之django-redis
  3. EAR、JAR、WAR(IT)
  4. python数据类型、if判断语句
  5. tp5在apache下能访问,但放到nginx下报404
  6. bzoj 4361: isn
  7. highchart接收后台数据用法
  8. CSUOJ 1010: Water Drinking
  9. 如何向某网址Post信息,并得到CookieContainer以便以后直接通过验证
  10. laravel数组转换为字符串_LeetCode刷题实战108:将有序数组转换为二叉搜索树