《Java从入门到放弃》框架入门篇:Struts2的基本数据传递方式 推荐

把这个和JSP的数据传递方式对比一下,你就会发现·······真的可以少写两句代码!!!

struts2中常用的两种数据传递方式如下:

  1. 属性匹配方式
  2. ModelDriven接口匹配方式(常用于自定义类型)

个人比较喜欢使用第一种,为什么呢?因为············懒~~~~~。

接下来,有请代码君登场!!!

一、属性匹配方式

属性匹配又分为两种情况,一种是Java基本数据类型,一种是自定义类型,请Look下面的Code。

 1.1)自定义一个Singer类,包含3个属性(singerID,singerName,area),代码如下

public class Singer {
	private int singerID;		//歌手ID
	private String singerName;	//歌手姓名
	private String area;		//所属地区
	public int getSingerID() {
		return singerID;
	}
	public void setSingerID(int singerID) {
		this.singerID = singerID;
	}
	public String getSingerName() {
		return singerName;
	}
	public void setSingerName(String singerName) {
		this.singerName = singerName;
	}
	public String getArea() {
		return area;
	}
	public void setArea(String area) {
		this.area = area;
	}
}

 1.2)在前面定义的Action类中添加两个属性(msg和singer),并修改add方法

public class Hello extends ActionSupport {
	private String msg;       //基本类型
	private Singer singer;    //自定义类型
	
	public String getMsg() {
		return msg;
	}
	public void setMsg(String msg) {
		this.msg = msg;
	}
	public Singer getSinger() {
		return singer;
	}
	public void setSinger(Singer singer) {
		this.singer = singer;
	}

	// 默认调用
	@Override
	public String execute() throws Exception {
		System.out.println("默认调用的方法!");
		return SUCCESS;
	}
	// 添加
	public String add() {
		System.out.println("调用了添加的方法!");
		System.out.println("编号:"+singer.getSingerID());
		System.out.println("姓名:"+singer.getSingerName());
		System.out.println("地区:"+singer.getArea());
		System.out.println("留言:"+msg);
		
		return "add";
	}
}

 1.3)编写添加歌手的JSP页面(前面的singer_add.jsp),注意看代码中表单元素的name属性中基本类型和自定义类型的区别(singer就是上面Action中的singer属性)

    <body>
  	<!-- 提交给前面配置的通配符方式的Action -->
  	<form action="smng_add.action" method="post">
  		编号:<input type="text" name="singer.singerID" value="9527" /><br />
  		姓名:<input type="text" name="singer.singerName" value="小马哥" /><br />
  		地区:<select name="singer.area">
  			<option>大陆</option>
  			<option selected="selected">香港</option>
  			<option>台湾</option>
  			</select><br />
  		留言:<input type="text" name="msg" value="好酷啊!" /><br />
  		<input type="submit" value="提交" />
  	</form>
    </body>

 1.4)因为该JSP页面放在WEB-INF下面,不能直接访问,所以再在struts.xml中配置一个访问Action

<action name="singeradd" class="">
    <result>/WEB-INF/jsp/singer_add.jsp</result>
</action>

1.5)接下来就可以访问http://localhost:8080/strDemo/singeradd.action点击提交看效果了, 是不是很简单!!!


二、ModelDriven接口方式

    这种方式与属性方式最大的区别就是自定义类型不用封装,而是通过实现该接口来进行自动赋值,请看下面代码。(主要是Action类不一样,另外JSP页面的name属性也不需要加对象名了)

 2.1)修改Action类

public class Hello extends ActionSupport implements ModelDriven<Singer> {
	
	private String msg;
	
	//不用封装get和set,但必须实例化,否则报空指针异常
	private Singer singer = new Singer();	
	
	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

	// 默认调用
	@Override
	public String execute() throws Exception {
		System.out.println("默认调用的方法!");
		return SUCCESS;
	}
	// 添加
	public String add() {
		System.out.println("调用了添加的方法!");
		System.out.println("编号:"+singer.getSingerID());
		System.out.println("姓名:"+singer.getSingerName());
		System.out.println("地区:"+singer.getArea());
		System.out.println("留言:"+msg);
		
		return "add";
	}
	//下面是实现接口后的新增代码
	@Override
	public Singer getModel() {
		// TODO Auto-generated method stub
		return singer;
	}
	public void setModel(Singer singer){
		this.singer = singer;
	}
	
}

2.2)修改JSP页面(注意与前面的JSP页面对比表单元素的name值,这儿直接写singer对象的属性名)

    <body>
  	<!-- 提交给前面配置的通配符方式的Action -->
  	<form action="smng_add.action" method="post">
  		编号:<input type="text" name="singerID" value="9527" /><br />
  		姓名:<input type="text" name="singerName" value="小马哥" /><br />
  		地区:<select name="area">
  			<option>大陆</option>
  			<option selected="selected">香港</option>
  			<option>台湾</option>
  			</select><br />
  		留言:<input type="text" name="msg" value="好酷啊!" /><br />
  		<input type="submit" value="提交" />
  	</form>
    </body>

OK,最终的效果是一模一样,今天的内容就到这儿,感谢各位看官。

这些入门级的东西,应该还没有出现要放弃的客官吧,如果还看得过眼,请点个赞

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Echo is learning

字符、字符集、编码,以及它们python中会遇到的一些问题(上)

1677
来自专栏喵了个咪的博客空间

zephir-(12)php函数和异常处理

#zephir-php函数和异常处理# ? ##前言## 先在这里感谢各位zephir开源技术提供者 经过了一个多月的学习,zephir的文档译文和基础讲解也将...

3436
来自专栏智能大石头

深度解析C++拷贝构造函数

自2003年开始,断断续续用了12年C++,直到这两年做物联网嵌入式开发,感觉对C++的掌握仅有10%左右。 习惯了C#开发,C++倒显得难以下手!今天就一个函...

1949
来自专栏xingoo, 一个梦想做发明家的程序员

MFC中注释含义

下面是 CStdioFile 类的部分列表,其中使用了 MFC 在其类中按类成员的用法划分它们时所采用的大多数标准注释: class CStdioFile :...

1847
来自专栏Java帮帮-微信公众号-技术文章全总结

Java 8 Lambda函数编程【面试+工作】

链接:https://pan.baidu.com/s/1q_S2URG8mWKI1nTvPVvDzg 密码:2als

1323
来自专栏python3

习题33:字典

dict可以让你通过任何东西找到元素,不只是数字,字典可以将一个物件和另外一个东西关联,不管它们的类型是什么,举例说明

793
来自专栏向治洪

Java 8新特性

编者注:Java 8已经公布有一段时间了,种种迹象表明Java 8是一个有重大改变的发行版。 在Java Code Geeks上已经有大量的关于Java 8 的...

2776
来自专栏好好学java的技术栈

一文看透java8新特性

毫无疑问,Java 8发行版是自Java 5(发行于2004,已经过了相当一段时间了)以来最具革命性的版本。Java 8 为Java语言、编译器、类库、开发工具...

832
来自专栏企鹅号快讯

改善Python程序的一些建议

第一章:引论 建议1、理解Pythonic概念----详见Python中的《Python之禅》 建议2、编写Pythonic代码 (1)避免不规范代码,比如只用...

1927
来自专栏函数式编程语言及工具

Scalaz(53)- scalaz-stream: 程序运算器-application scenario

    从上面多篇的讨论中我们了解到scalaz-stream代表一串连续无穷的数据或者程序。对这个数据流的处理过程就是一个状态机器(state machine...

1809

扫码关注云+社区