Struts获取表单数据

一、在动作类中访问ServletAPI

1、第一种方式:直接使用ServletActionContext类获取



可以看出Struts2对request进行了封装

2、第二种方式:使用注入的方式,实现拦截器注入,servletConfig

  1、定义成员变量

2、实现接口

3、实现接口中的方法



二、分文件编写框架配置文件


1、不分文件开发可能产生的问题

就类似于我们在写java类时,所有代码都写在一个类里,甚至写在一个方法里。

<struts>
    <include file="struts_usr.xml"></include>
    <include file="struts_role.xml"></include>
</struts>

2、静态参数封装:使用注入给参数赋值

<pre name="code" class="html">
<struts>
    <constant name ="struts.devMode" value="true"></constant>
<package name ="p1" extends="struts-default">
	<action name="action1" class="com.lzh.web.action.TestAction" method="addUser">
	<!-- 静态参数封装:使用注入给参数赋值
	由拦截器实现的注入:staticParams拦截器
<span style="white-space:pre">	</span>中文不会乱码,因为在defaultStack中设置了编码
	默认存在defaultStack中定义的拦截器,如果自己卸了拦截器,那么默认的都不存在了,只存在自己写的拦截器-->
		<param name="username">王小二</param>
		<param name="age">20</param>
	</action>
</package>
</struts>


 
 


3、动态参数封装

动态参数封装的第一种方式:

直接在动作类中定义参数:参数和动作类绑定在一起

由拦截器执行的注入params



<struts>
    <constant name ="struts.devMode" value="true"></constant>
<package name ="p1" extends="struts-default">
	<action name="action1" class="com.lzh.web.action.TestAction" method="addUser">
	</action>
</package>
</struts>


表单上name属性的值必须和动作类中set方法后的名字一致




动态封装参数的第二种方式

实现参数的动作类的分离

注意:页面上name属性的值需要时user.username,user.age

拦截器实现的注入params

getUser:拦截器不知道是否有User对象,先判断有没有User对象,知识判断有没有,如果没有会使用

反射创建一个对象

setUser:拦截器把使用反射创建的对象赋给动作对象中的user成员

getUser:得到User对象

user.setUserName(),user.setAge()


如果User user = new User()

getUser:先判断有没有对象,结果有,并没有得到User对象

getUser:得到User对象


<struts>
    <constant name ="struts.devMode" value="true"></constant>
<package name ="p1" extends="struts-default">
	<action name="action2" class="com.lzh.web.action.TestAction" method="addUser">
	</action>
</package>
</struts>


动态封装参数的第三种方式

使用模型驱动封装参数:最终使用的方式

必须满足的前提条件:动作必须和参数分离

1、实现接口

public class TestAction3 extends ActionSupport implements ModelDriven<User>{

User user = new User()//必须自己创建对象(下图忘加)}

2、实现接口中的方法




jsp里

拦截器




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值