Struts 2 数据传递

来源:互联网 发布:金昌印花软件 编辑:程序博客网 时间:2024/06/06 06:29
Struts 2 数据传递


一 从前台页面
     把数据传到后台业务逻辑层


从前台页面把数据传到后台业务逻辑层
传统的Web应用程序(例如使用Jsp/Servlet技术)是由开发人员调用HttpServletRequest的getParameter(String name)方法从请求中获取数据。
而Web框架(例如Struts1,Struts2)都提供了数据绑定机制(也叫界面绑定机制),由框架从请求中获取数据,然后帮定到一个JavaBean对象中。
Struts2提供了多种方式用于接收用户输入的数据(即从前台页面把数据传到后台业务逻辑)
从前台页面把数据传到后台业务逻辑层
1、使用领域对象接收用户输入
2、使用ModelDriven action接收用户输入
3、使用action的属性接收用户输入
4、使用request对象接收用户输入(和Servlet API耦合的方式)
1、用领域对象接收用户输入
login.jsp页面中,form表单内
<input type=“text” name=“user.username”/>
<input type=“text” name=“user.password”/>
领域对象 User.java 内,两个属性及其getter和setter方法
private  String username;
private String password;、
action类 LoginAction 实现了Action接口
Private User  user;
//拥有一个action属性及其getter和setter方法,同时注意,user无需实例化,由struts2会遍历所有的请求参数,自动依次实例化任何用于填充数据的对象。
在success.jsp页面中
<s:property value=“user.username”/>










2、用ModelDriven action接收用户输入
Struts2提供了另外一种直接使用领域对象的方式,就是让action实现ModelDriven接口。ModelDriven让你可以直接操作应用程序中的领域对象,允许你在Web层和业务逻辑层使用相同的对象。
login.jsp页面中,form表单内
<input type=“text” name=“username”/>
<input type=“text” name=“password”/> 
//无需再使用”user.”前缀了
领域对象 User.java 内,两个属性及其getter和setter方法
private  String username;
private String password;、
action类 LoginAction 实现了Action接口、ModelDriven接口
private User  user=new User();
public  User getModel(){
         return user;
}
//不是action属性及没有其getter和setter方法,同时注意,user无需实例化,由struts2会遍历所有的请求参数,自动依次实例化任何用于填充数据的对象。
//getModel()方法返回一个用于接收用户输入的模型对象,从而在页面中,这个模型对象中的属性可以直接通过属性名来访问(如username),而不需要使用形如“user.username”这种格式的表达式。在action中也不需要为这个模型对象提供JavaBean风格的getter和setter方法。
在success.jsp页面中
<s:property value=“username”/>


3、用action的属性接收用户输入
login.jsp页面中,form表单内
<input type=“text” name=“username”/>
<input type=“text” name=“password”/>
action类 LoginAction 实现了Action接口
private String username;
private String password;
//拥有两个action属性及其getter和setter方法。
在success.jsp页面中
<s:property value=“username”/>
//使用了OGNL值栈
4、使用request对象接收用户输入(和Servlet API耦合的方式)
直接访问Servlet API将使你的action与Servlet环境耦合在一起,我们知道对象HttpServletRequest对象、HttpServletResponse对象和ServletContext对象,他们都是由Servlet容器来构造的,与这些对象绑定在一起,测试时就需要有Servlet容器,不便于Action单元的测试。
login.jsp页面中,form表单内
<input type=“text” name=“username”/>
<input type=“text” name=“password”/>
action类 LoginAction 实现了Action接口
HttpServletRequest  request=ServletActionContext.getRequest();
HttpServletResponse response=ServletActionContext.getResponse();
HttpSession session=request.getSession();
ServletContext application=ServletActionContext.getServletContext();


//HttpServletRequest  request= ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
//HttpServletResponse response= ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE);
//HttpSession session=request.getSession();
//ServletContext application= ActionContext.getContext().get(ServletActionContext.SERVLET_CONTEXT);


String username=request.getParameter(“username”);
String password=request.getParameter(“password”);


从后台业务逻辑层
                把数据传到前台页面
从后台业务逻辑层把数据传到前台页面
1、使用领域对象JavaBean,ognl的值栈/Jsp:useBean标签
2、使用action的属性,ognl的值栈
3、使用request对象、response对象、session对象、application对象(和Servlet API耦合的方式)
4、使用request、response、session、application Map型对象(和Servlet API解耦的方式)
5、注入request、response、session、application Map型对象(和Servlet API解耦的方式)




1、使用领域对象JavaBean(1)
login.jsp页面中,form表单内
<input type=“text” name=“user.username”/>
<input type=“text” name=“user.password”/>
领域对象 User.java 内,两个属性及其getter和setter方法
private  String username;
private String password;、
action类 LoginAction 实现了Action接口
Private User  user;
//拥有一个action属性及其getter和setter方法,同时注意,user无需实例化,由struts2会遍历所有的请求参数,自动依次实例化任何用于填充数据的对象。
//在LoginAction内的execute()方法内操作user的setter(),从而改变了从前台传入到action的数据。


1、使用领域对象JavaBean(2)
在success.jsp页面中,有多种方法可以获得被传递的数据对象,比如:
<s:property value=“user.username”/>
或者
<jsp:useBean id=“user” scope=“session” class=“com.ibm.model.User”/>


<jsp:getProperty name=“user” property=“username”/>


2、使用action的属性,ognl的值栈
action类 LoginAction 实现了Action接口
private String strValueStack;
//拥有一个action属性及其getter和setter方法。
Public execute(){
//
strValueStack=“Who am i?”;
//
}


在success.jsp页面中
<s:property value=“strValueStack”/>
//使用了OGNL值栈


3、用request、response对象、session、application对象(和Servlet API耦合的方式)(1)
action类 LoginAction 实现了Action接口
HttpServletRequest  request=ServletActionContext.getRequest();
HttpServletResponse response=ServletActionContext.getResponse();
HttpSession session=request.getSession();
ServletContext application=ServletActionContext.getServletContext();


//HttpServletRequest  request= ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
//HttpServletResponse response= ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE);
//HttpSession session=request.getSession();
//ServletContext application= ActionContext.getContext().get(ServletActionContext.SERVLET_CONTEXT);
request.setAttribute(“key1”,valueObject1);
session.setAttribute(“key2”,valueObject2);




3、用request、response对象、session、application对象(和Servlet API耦合的方式)(2)
在success.jsp页面中,有多种方法可以获得被传递的数据对象,比如:
(A)
<%
    Object valueObject1=request.getAttribute(“key1”);
      Object valueObject2=session.getAttribute(“key2”);




%>
 (B) <s:iterator value="#request.key1"> 
<s:property value=“#request.key1”>获得被传递的数据对象。
4、用request、response、session、application对象(和Servlet API解耦的方式)(1)
action类 LoginAction 实现了Action接口
Map  request= (Map)ActionContext.getContext().get(“request”);
Map session= (Map)ActionContext.getContext()..getSession();
Map application= (Map)ActionContext.getContext().getApplication();
Map parameters= (Map)ActionContext.getContext().getParameters();


request.put((“key1”,valueObject1);
session.put(“key2”,valueObject2);


4、用request、response、session、application对象(和Servlet API解耦的方式)(2)
在success.jsp页面中,有多种方法可以获得被传递的数据对象,比如:
(A)
<%
    Object valueObject1=request.getAttribute(“key1”);
      Object valueObject2=session.getAttribute(“key2”);




%>
 (B) <s:iterator value=“#request.key1”> 
<s:property value=“#request.key1”>获得被传递的数据对象。
(C)${ requestScope.key1 }获得被传递的数据对象。


5、注入Map型对象(和Servlet API解耦的方式)
action类 LoginAction 实现了Action接口、RequestAware、SessionAware、ApplicationAware和ParameterAware接口
private Map  request;
private Map session;
private Map application;
private Map parameters;
以及四个接口的重载方法:
@Override
public void setRequest(Map request){
this.request = request;
}
@Override
public void setSession(Map session){
this.session = session;
}
@Override
public void setApplication(Map application){
this.application = application;
}
@Override
public void setParameters(Map parameters){
this.parameters = parameters;
}
request.put((“key1”,valueObject1);
session.put(“key2”,valueObject2);
5、注入Map型对象(和Servlet API解耦的方式)
Struts2框架在运行时向Action实例注入request\session\application 等Map对象。
在success.jsp页面中,有多种方法可以获得被传递的数据对象,比如:
(A)
<%
    Object valueObject1=request.getAttribute(“key1”);
      Object valueObject2=session.getAttribute(“key2”);




%>
 (B) <s:iterator value=“#request.key1”> 
<s:property value=“#request.key1”>获得被传递的数据对象。
(C)${ requestScope.key1 }获得被传递的数据对象。

原创粉丝点击