struts-基础内容-5-数据处理,数据回显,模型驱动
来源:互联网 发布:大数据的价值体现在 编辑:程序博客网 时间:2024/06/06 02:24
@Override public String execute() throws Exception { HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(); ServletContext application = ServletActionContext.getServletContext(); request.setAttribute("request_data","request_data"); session.setAttribute("session_data","session_data"); application.setAttribute("application_data","application_data"); return SUCCESS; }
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"><struts> <package name="data" namespace="/" extends="struts-default"> <global-results> <result name="success">/data.jsp</result> </global-results> <action name="data" class="com.cx.Data.DataAction"> </action> </package></struts>
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>data</title></head><body>data<br>${request_data}<br>${session_data}<br>${application_data}</body></html>
方式二:通过ActionContext类-解耦方式-不引入servelt-api
//方式二 ActionContext ac = ActionContext.getContext(); Map<String , Object> request = ac.getContextMap(); Map<String, Object> session = ac.getSession(); Map<String ,Object> application = ac.getApplication(); request.put("request_data","request_data"); session.put("session_data","session_data"); application.put("application_data","application_data");
方式三:实现接口
package com.cx.Data;import com.opensymphony.xwork2.ActionSupport;import org.apache.struts2.interceptor.ApplicationAware;import org.apache.struts2.interceptor.RequestAware;import org.apache.struts2.interceptor.SessionAware;import java.util.Map;/** * Created by cxspace on 16-7-10. */public class DataAction extends ActionSupport implements RequestAware , SessionAware ,ApplicationAware{ private Map<String,Object> request; private Map<String,Object> application; private Map<String,Object> session; /* 1.请求数据封装 2.调用service层处理业务逻辑,拿到结果数据 3.数据保存到域中 Struts对数据操作方式一:直接拿到servletAPI,执行操作 */ @Override public String execute() throws Exception { request.put("request_data","request_data-方式三"); session.put("session_data","session_data-方式三"); application.put("application_data","application_data-方式三"); return SUCCESS; } @Override public void setRequest(Map<String, Object> request) { //struts运行的时候,会把代表request的map对象注入 this.request = request; } @Override public void setApplication(Map<String, Object> application) { this.application = application; } @Override public void setSession(Map<String, Object> session) { this.session = session; }}
总结
方式1:直接通过ServletActionContext获取servelt-api
方式2:通过ActionContext获取不同的map
方式3:实现接口的方法
方式2 vs 方式3
方式2适合业务方法少的
方式3适合业务方法多的
4. Struts中常用的几个技术
数据回显
数据回显,必须要用struts标签!
Action中:
// 进入修改页面
public String viewUpdate() {
// 模拟一个对象(先获取一个id,再根据id调用service查询,把查到的结果保存到域)
User userInfo = new User();
userInfo.setUserName("Jack");
userInfo.setEmail("yuanjie@itcast.cn");
ActionContext ac = ActionContext.getContext();
// Map<String,Object> request = (Map<String, Object>) ac.get("request");
// request.put("userInfo", userInfo);
/************* 数据回显***************/
// 获取值栈
ValueStack vs = ac.getValueStack();
vs.pop();// 移除栈顶元素
vs.push(userInfo); // 入栈
// 进入修改页面
return"viewUpdate";
}
JSP页面:
<body>
<%@tagliburi="/struts-tags" prefix="s"%>
<br/>
<!-- 在页面文本框内,显示要修改记录的数据 -->
<!-- 手动通过value设置显示的值
<s:form action="#">
用户名: <s:textfield name="user.userName" value="%{#request.userInfo.userName}"></s:textfield> <br/>
邮箱: <s:textfield name="user.email" value="%{#request.userInfo.email}"></s:textfield> <br/>
</s:form>
-->
<!-- 数据回显技术:s:textfield会自动查找根元素数据(Ognl表达式语言取值) -->
<s:formaction="#">
用户名: <s:textfieldname="userName"></s:textfield><br/>
邮箱: <s:textfieldname="email"></s:textfield><br/>
</s:form>
<s:debug></s:debug>
</body>
模型驱动
Struts运行时候,会执行默认的拦截器栈,其中有一个拦截器,模型驱动拦截器:
<interceptor
name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>
@Overridepublic String intercept(ActionInvocation invocation) throws Exception {Object action = invocation.getAction();if (action instanceof ModelDriven) {ModelDriven modelDriven = (ModelDriven) action;ValueStack stack = invocation.getStack();Object model = modelDriven.getModel();if (model != null) {stack.push(model);}if (refreshModelBeforeResult) {invocation.addPreResultListener(new RefreshModelBeforeResult(modelDriven, model));}}return invocation.invoke();}
引入
prams拦截器,可以把请求数据自动填充的action的属性中举例1:JSP<input type=text name=userName /><input type=text name=pwd />Actionclass UserAction{// 封装请求数据private String userName;private String pwd;//.. set方法}举例2:JSP<input type=text name=user.userName /><input type=text name=user.pwd />Actionclass UserAction{// 封装请求数据private User user;..}举例3:(模型驱动)JSP<input type=text name=userName /><input type=text name=pwd />Actionclass UserAction{// 封装请求数据private User user;..}
步骤及原理
步骤:
1. 实现ModelDriver接口
2. 实现接口方法: 接口方法返回的就是要封装的对象
3. 对象一定要实例化。
分析:
/*** 1. 数据回显* 2. 模型驱动* @author Jie.Yuan**/publicclassUserActionextends ActionSupport implements ModelDriven<User> { // 封装请求数据private User user = new User();
publicvoid setUser(User user) {this.user = user;}public User getUser() {returnuser;}// 实现模型驱动接口方法@Overridepublic User getModel() {return user;}public String add() {// 测试: 使用了模型驱动,是否数据正常? OkSystem.out.println(user);return"success";}
- struts-基础内容-5-数据处理,数据回显,模型驱动
- javaweb基础----struts驱动模型
- 第31天(就业班) struts数据校验、UI标签、ognl表达式语法、数据回显、模型驱动
- Struts模型驱动
- Struts模型驱动
- struts驱动模型方式
- Struts属性和模型驱动
- Struts标签实现模型驱动
- Struts2-数据回显、模型驱动等常用技术
- struts属性驱动与模型驱动
- struts模型驱动和属性驱动
- 数据挖掘(数据处理基础)
- 数据驱动与模型驱动
- struts同时使用属性注入和模型驱动注入数据注入失败原因分析及解决方法
- Struts 数据处理
- Struts数据回显
- 【Struts】数据回显
- Struts 2 模型驱动动作教程
- 今天遇到的bug。。。
- struts基础内容-2-配置详解
- struts-基础内容-3-action开发,路径,常量
- struts-基础内容-4-全局配置
- canvas动画之一 -- 百分比进度加载
- struts-基础内容-5-数据处理,数据回显,模型驱动
- struts-基础内容-6-数据的自动封装和类型转换
- struts-基础内容-7-文件上传
- struts-基础内容-8-文件下载
- struts-核心内容-9-拦截器
- javaweb-c3p0连接池
- struts-核心内容-10-Ognl表达式语言
- Android系列之Service组件的应用
- struts-10-主要标签