在struts2中,如何获取表单元素的内容:
1、属性驱动
1、action中属性的名称和页面上name的名称保持一致
2、属性必须有set和get方法。
属性驱动原理:
1.当请求一个页面时:例:http://localhost:8080/itheima03_struts2/login.jsp
2.login.jsp
用户名:<input type="text" name="username">
密码:<input type="password" name="password">
3.会经过一个struts2的默认的拦截器:
ParametersInterceptor:
1、把页面上表单的元素获取,封装成了一个TreeMap
2、遍历TreeMap
for(Entry<String,Object[]> entry:treeMap){
valueStack.setValue(entry.getKey(),entry.getValue()[0]);
}
说明:
1、在执行该拦截器的时候,action已经在栈顶了,那么action的属性在对象栈中
2、通过valueStack.setValue的方法可以改变对象栈的属性的值。
4.
LoginAction{
private String username;
private String password;
//set和get方法
public String login(){
在执行该方法的时候,username和password已经有值了
}
}
2、模型驱动
1、一个action必须实现一个接口ModelDriver<获取数据的bean>
2、该action中必须有一个方法getModel()
3、在action中创建一个对象,用于getModel方法的返回值
4、bean中的属性和页面上name属性的值对应。
属性驱动拦截器的部分源码:
ModelDriverInterceptor{
interceptor(){
Object action = invocation.getAction();
if (action instanceof ModelDriven) {//该类必须实现ModelDriven
ModelDriven modelDriven = (ModelDriven) action;
ValueStack stack = invocation.getStack();
Object model = modelDriven.getModel();
stack.push(model);//把模型驱动的对象放入到栈顶
该对象位于对象栈栈顶的时候,其内部属性会暴漏出来,
所以可以在页面中直接用标签指定的name取出该对象的属性值(属性驱动)
}
}
1、属性驱动
1、action中属性的名称和页面上name的名称保持一致
2、属性必须有set和get方法。
属性驱动原理:
1.当请求一个页面时:例:http://localhost:8080/itheima03_struts2/login.jsp
2.login.jsp
用户名:<input type="text" name="username">
密码:<input type="password" name="password">
3.会经过一个struts2的默认的拦截器:
ParametersInterceptor:
1、把页面上表单的元素获取,封装成了一个TreeMap
2、遍历TreeMap
for(Entry<String,Object[]> entry:treeMap){
valueStack.setValue(entry.getKey(),entry.getValue()[0]);
}
说明:
1、在执行该拦截器的时候,action已经在栈顶了,那么action的属性在对象栈中
2、通过valueStack.setValue的方法可以改变对象栈的属性的值。
4.
LoginAction{
private String username;
private String password;
//set和get方法
public String login(){
在执行该方法的时候,username和password已经有值了
}
}
2、模型驱动
1、一个action必须实现一个接口ModelDriver<获取数据的bean>
2、该action中必须有一个方法getModel()
3、在action中创建一个对象,用于getModel方法的返回值
4、bean中的属性和页面上name属性的值对应。
属性驱动拦截器的部分源码:
ModelDriverInterceptor{
interceptor(){
Object action = invocation.getAction();
if (action instanceof ModelDriven) {//该类必须实现ModelDriven
ModelDriven modelDriven = (ModelDriven) action;
ValueStack stack = invocation.getStack();
Object model = modelDriven.getModel();
stack.push(model);//把模型驱动的对象放入到栈顶
该对象位于对象栈栈顶的时候,其内部属性会暴漏出来,
所以可以在页面中直接用标签指定的name取出该对象的属性值(属性驱动)
}
}
本文介绍Struts2框架中两种获取表单元素内容的方法:属性驱动与模型驱动。属性驱动通过设置Action属性与表单name一致实现,模型驱动则需实现ModelDriven接口。
2439

被折叠的 条评论
为什么被折叠?



