Struts2中Action接收参数的方法主要有以下三种:
1. 使用Action的属性接收参数: a. 定义:在Action类中定义属性,创建get和set方法 b. 接收:通过属性接收参数,如:username c. 发送:使用属性名传递参数,如:user!login.action?username=caolei&password=19871027
2. 使用Domain Model接收参数: a. 定义:定义Model类,在Action中定义Model类的对象 (不需要new), 并创建该对象的get和set方法; b. 接收:通过对象的属性接收参数,如:user.getUsername() c. 发送:使用对象的属性传递参数,如:user!login.action?user.username=caolei&user.password=198710
3. 使用ModelDriven接收参数:
a. 定义:Action实现ModelDriven泛型接口,定义Model类的对象 (必须new), 无需提供user的get和set方法,而是通过getModel()方法返回该对象; b.接收:通过对象的属性接收参数,如:user.getUsername(); c.发送:直接使用属性名传递参数,如:user!login.action?username=caolei&password=19871027
1、使用Action的属性接收参数
1.1 JSP页面代码1.1.1注意对应的name属性直接使用Action中定义好的属性名,如username, passwordURL请求: http://localhost:8080/Struts2/ user!login.action?username=caolei&password=19871027
1.2 Action代码com.ssh.course.action.UserAction1.2.1 在Action类中定义username和password属性,并提供get和set方法;1.2.2在Action中直接通过属性名username和password取得从前台JSP传递过来的参数;
2、使用Domain Model接收参数
Domain Module中文解释:域模型,Domain Module接收参数的方式就是在Action中设一个Module对象。为什么要用Domain Module来接收参数呢?我们从前台JSP向后台Action中传递参数,Action所要做的处理无非是紧接着再把这个参数传递给对应的Module,那么假如我们的Module有100个变量,那么我们用第一种方法接收参数时就要在Action中设置100个变量,但如果我们用Domain Module的话就简单的多。在我们的Action中没有很多的属性,而是用Model层用到的模型,来保存它的一个对象。
比如在我们的学生课程及成绩管理系统中,要实现用户注册登录,那么后台Module中就会相应建立一个User类,也就是下面所说的JavaBean或Module,用于封装User对象的各个属性。简化的代码如下:
2.1 JavaBean 代码com.ssh.course.pojos.User
2.1.1 简单的JavaBean,封装了User对象的属性username和password 现假设前台JSP需要向后台Action传递一个user对象的username 和 password 两个属性,JSP代码如下:
2.2 JSP页面代码http://localhost:8080/Struts2/user/login.jsp
2.2.1 注意对应的name属性应该是”对象名+属性名”,如user.username, user.password
URL请求: http://localhost:8080/Struts2/user!login.action?user.username=caolei&user.password=19871027
前台传给后台两个参数user.username=caolei&user.password=19871027, 那么在访问Action过程中,Struts2会自动为Action中的这两个变量设置前台传来的值。
我们首先在相应的Action 中声明一个private User user; 变量,并提供get、set方法,注意在Action中设置的变量无论是基本类型,还是引用类型,我们只需要声明,但不需要定义,简单地说,就是我们不需要去new一个变量,new的过程 由Struts2利器来自动帮我们完成。Action中代码如下:
2.3 Action代码com.ssh.course.action.UserAction
2.3.1 private User user; 变量,并提供get、set方法
实际上,当前台JSP向后台的一个Action发出请求的时候,Struts2会相应地new出来一个Action对象,并调用Action中的setXXX方法,就这样 Struts2通过这个set方法将前台传来的值赋给了Action中的变量。
2.3.2 在Action中如何使用接收的参数, 通过user.getUsername()和user.getPassword()
3、使用 ModelDriven接收参数
我们从前台JSP向后台Action中传递参数,同方式2,同样用到JavaBean,参数被传入至Action后,会被ModelDriven对象根据参数名自动赋值给User对象相应的属性而生成User对象,并且由getModel()返回。那么我们在Action中就可以利用这个对象了。
注意:传入的参数名需要与对象模型(JavaBean)中的成员属性名一致。
比如在我们的学生课程及成绩管理系统中,要实现用户注册登录,那么后台JavaBean中就会相应建立一个User类,用于封装User对象的各个属性。简化的代码如下:
3.1 JavaBean 代码com.ssh.course.pojos.User
3.1.1 简单的JavaBean,封装了User对象的属性username和password
现假设前台JSP需要向后台Action传递一个user对象的username 和 password 两个属性,JSP代码如下:
3.2 JSP页面代码http://localhost:8080/Struts2/user/login.jsp
3.2.1注意对应的name属性直接使用Action中定义好的属性名,如username, password
URL请求: http://localhost:8080/Struts2/ user!login.action?username=caolei&password=19871027
前台传给后台两个参数username=caolei&password=19871027, 那么在访问Action过程中,Struts2会自动为Action中的这两个变量设置前台传来的值。
我们首先在相应的Action 中声明并new一下:private User user = new User(); 无需提供get、set方法,在创建Action的时候,Struts2发现Action实现了ModelDriven接口,所以会调用接口中的getModel()方法,取到了user。Action中代码如下:
3.3 Action代码com.ssh.course.action.UserAction
3.3.1 private User user; 此处无需提供get、set方法,但user对象一定要手动new一下:
3.3.2 在Action中如何使用接收的参数,通过user.getUsername()和user.getPassword
Struts2中Action接收参数的三种方法总结:
第一种方法把属性值都放在Action中,当属性值较多时Action的内容将变得臃肿(一系列的get、set方法)。此方法比较直观易用,适用于对象属性值较少的时候,实际项目中较好使用。
第二种方法较第一种方法有所改进,使用了Model对象模型,且可传入多个model的值,解决了属性值时Action内容臃肿的问题,缺点是值的传递和接收JSP页面需要进行标识,一般是对象名+属性名,有点不方便。
第三种方法实现了ModelDriven<T>接口,优点同方法2,且无需提供get、set方法,同时JSP页面无需标识,直接使用属性名,使后台程序的logic更加清晰。缺点是不能传入多个model的值。
1. com.ssh.course.action Struts2的Action,与JSP一起构成表示层2. com.ssh.course.dao 数据访问层(DAO层,Hibernate实现)接口3. com.ssh.course.dao.impl 数据访问层(DAO层,Hibernate实现)接口实现4. com.ssh.course.pojos 实体类和对象关系表映射文件(Hibernate实现)5. com.ssh.course.service 业务逻辑层(Spring实现)接口6. com.ssh.course.service.impl 业务逻辑层(Spring实现)接口实现7. com.ssh.course.util 通用工具类,如分页,数据类型转换等等8. applicationContext.xml Spring框架配置文件9. struts.xml struts2框架配置文件1.1 在MyEclipse 9.1中关联Struts2的JavaSource,步骤如下:在MyEclipse 9.1中右键单击项目文件Web App Libraries目录下的struts2-core-2.3.1.jar文件, 选择Properties —> Java Source Attachment
1.2 在MyEclipse 9.1中关联Struts2的JavaDoc,步骤同上:(其他框架关联方式类似)