Struts2学习笔记(2)值传递

1.action接收jsp传过来的值:
 a.定义一个User类   有name  pwd属性,  添加相应的get,set方法
  
 b.<!-- 方式1 普通java类 -->
  在UserAction中
   添加: private User user;  并添加相应的get,set方法

<!-- 方式2 实现ModelDriven<T>接口-->

  在UserAction中
  @Override
  public User getModel() {
   return user;
  }

<!--方式3 在UserAction中 直接写属性>

 private String name;
  private String pwd;
  public String methodxxx() {
   User user=new User();
   ...xxx;
  }

注意:下面的jsp在取到值时会自动的new User()对象。所以在methodXXX中必须判断属性而不能用User是否为空
  
 
 c.jsp界面中添加form表单

  <form action="User_register" method="post">
   <label style="color:red;">${errorMsg }</label><br/>
   注册用户名<input type="text" name="user.name"/><br/>
   注册密码<input type="password" name="user.pwd"/><br/>
   <input type="submit" value="注册"/>
  </form>

表单提交之后到UserAction的register中直接用user就可以了。
  框架直接将数据存如user中了  已经

如果action中class未定义  则调用框架里面默认的action

 <default-class-ref class="com.opensymphony.xwork2.ActionSupport" />

---------------------------------以上内容在g:codespace/Struts2代码区间中 Test中--------------------------

2.action传值jsp中接受
 3种方式都是在action处理
 (1)解耦合:间接使用

public String execute(){
  //获得Action的上下文
  ActionContext ac=ActionContext.getContext();
  //①获取传值对象
  Map<String,Object> request=(Map<String, Object>) ac.get("request");
  Map<String,Object> session=ac.getSession();
  Map<String,Object> application=ac.getApplication();
  //②存储值
  request.put("reqValue","这是通过request解耦合方式设置的值");
  session.put("sessionValue","这是通过session解耦合方式设置的值");
  application.put("applicationValue","这是通过application解耦合方式设置的值");
  
  return "success";
 }

(2)实现RequestAware,SessionAware,ApplicationAware

 public class TestAction02 implements RequestAware,SessionAware,ApplicationAware{
  private Map<String,Object> request;
  private Map<String,Object> session;
  private Map<String,Object> application;
  
  public String execute(){
   //2.存储值
   request.put("reqValue","这是通过request解耦合RequestAware方式设置的值");
   session.put("sessionValue","这是通过session解耦合SessionAware方式设置的值");
   application.put("applicationValue","这是通过application解耦合ApplicationAware方式设置的值");
   
   return "success";
  }
  @Override
  public void setApplication(Map<String, Object> application) {
   this.application=application;
  }
  @Override
  public void setSession(Map<String, Object> session) {
   this.session=session;
  }
  @Override
  public void setRequest(Map<String, Object> request) {
   this.request=request;
  }
 }

(3)直接使用  耦合方式

  public String execute(){
   //耦合:直接使用
   HttpServletRequest request=ServletActionContext.getRequest();
   HttpSession session=request.getSession();
   ServletContext application=ServletActionContext.getServletContext();
   //2.存储值
   request.setAttribute("reqValue","这是通过request耦合方式设置的值");
   session.setAttribute("sessionValue","这是通过session耦合方式设置的值");
   application.setAttribute("applicationValue","这是通过application耦合方式设置的值");
   
   return "success";
  }

------以上三种传值的同一实现的jsp
  jsp的取值界面

  <h1>
   request的值:${requestScope.reqValue }<br/>
   request的值:s标签---<s:property value="#request.reqValue"/><br/>
   session的值:${sessionScope.sessionValue }<br/>
   session的值:s标签---<s:property value="#session.sessionValue"/><br/>
   ...
  </h1>

(4)不知道怎么说----------------------------此处有待改进
  
  ValueStack 由 OGNL框架实现,可以把它简单的看作一个栈(List)
  Stack Context(保存方式是map类型):stack的上下文,它包含一系列对象,包括
  request,session,attr,application,map 等ValueStack中保存的值可以直接取,而stack中的需要在前面加#(request,session,application)

 public String execute(){
   ActionContext ac=ActionContext.getContext();
   //vs将值推入Value Stack Contents    由ognl框架实现
   ValueStack vs=ac.getValueStack();
     
   user.setName("张三");
   user.setPwd("abc");
   vs.push(user);
   
   User u1=new User();
   u1.setName("李四");
   u1.setPwd("2345");
   vs.push(u1);
   
   //这里将值传入Stack Context(保存方式是map类型)stack的上下文,它包含一系列对象
   Map<String,Object> request=(Map<String,Object>)ac.get("request");
   //2.存储值
   request.put("reqValue","这是通过request耦合方式设置的值");
   request.put("user", user);
   
   return "success";
  }

jsp的取值界面

  <h1>
   <s:property value="#request.user.name"/><br/>
   <s:property value="[0].name"/><br/>
   <s:property value="[1].name"/><br/>
   <s:property value="[1].toString()"/><br/>
  </h1>
  <s:debug/>

注意:s:property标签可以调用类的方法

Struts2学习笔记(2)值传递

时间: 2024-10-01 07:42:26

Struts2学习笔记(2)值传递的相关文章

Struts2 学习笔记(概述)

Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并实现应用的功能.通常分为数据模型和业务逻辑模型,数据模型用来存放业务数据,比如订单信息.用户信息等:而业务逻辑模型包含应用的业务操作,比如订单的添加或者修改等. 封装应用状态:某些应用数据封装起来,使得视图只能通过接口获取对应的数据 响应状态查询:对应用的状态改变进行处理 暴露应用功能:暴露接口 通

struts2学习笔记(三)—— 在用户注册程序中使用验证框架

实现目标: 1.使用验证框架对用户注册信息进行验证 2.验证用户名.密码.邮箱不能为空 3.验证用户名.密码长度 4.验证邮件地址格式 具体实现 一.Struts2应用的基础配置 这里不做详细阐述,具体为web.xml.相关jar包的配置 二.将页面显示的文本内容放到资源文件中 1.查看用户注册程序中的所有页面,找到所有可以显示的文本内容,将它们分离出来放到资源文件中. 2.与相关的Action类同名,以.preperties为扩展名,与Action类位于同一个包中,只能由该Action访问 R

struts2 学习笔记

Struts2 学习笔记 在使用J2EE编写网站的时候,我们经常会使用Struts2框架.Struts2的好处就是许多东西已经被封装好了,我们只需要包含给定的jar文件,就能够调用相应的方法和标签.下面我将简要介绍一下Struts2的使用和特点: 一.搭建Struts2的环境:(主要分为三个部分:包含lib文件.web.xml改写.新建一个Struts.xml) 1.打开myeclise软件,新建一个Dynamic web project,在WebContent/WEB-INF文件夹下的lib文

struts2学习笔记(8)-------struts2的ajax支持

struts2支持一种stream类型的Result,这种类型的Result可以直接向客户端浏览器响应二进制,文本等, 我们可以再action里面生成文本响应,然后在客户端页面动态加载该响应即可. 直接看例子: public class LoginAction { private String user; private String pass; private InputStream inputStream; public InputStream getInput(){ return inpu

Struts2学习笔记(OGNL表达式)

Struts2学习笔记(OGNL表达式) Struts 2支持以下几种表达式语言: OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言: JSTL(JSP Standard Tag Library),JSP 2.0集成的标准的表达式语言: Groovy,基于Java平台的动态语言,它具有时下比较流行的动态语言(如Python.Ruby和Smarttalk等)的一些起特性: Velocity,严格来说不是表达式语言,它是一种基于Ja

struts2学习笔记(一)

一.struts2和struts1的区别 1.Action类 a) Struts1要求Action类继承于一个抽象类,Struts1普遍使用抽象类编程而不是接口 b) Struts2的Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能.Struts2提供一个ActionSupport基类去实现常用的接口.Action接口不是必须的,任何有execute标识的POJO对象都可以作为Struts2的Action对象. 2.线程模式 a) Struts1的Act

struts2学习笔记(7)------------ognl表达式

OGNL表达式(Object-Graph Navigation Language),大概可以理解为:对象图形化导航语言.是一种可以方便地操作对象属性的开源表达式语言. Struts2自行维护一个特定范围的"银行",Action将数据放入其中,而JSP页面可从中取数据,表面上似乎看起来像是jsp可以直接访问Action数据.. 当Action属性不再是简单的值,而是某个对象,数组,集合时,就需要使用ognl表达式来访问这些对象,数组,集合内的数据了. 1)ognl的stack Conte

struts2学习笔记(4)---------action中的方法调用

系统需要使用Action的不同方法来处理用户请求,这就需要让同一个Action里面包含多个控制处理逻辑. 1)动态方法调用 即DMI(dynamic method invocation),使用actionName!methodName的形式来指定想要调用的方法,如果想使用DMI,需要在struts.xml里面加入这句话: <constant name="struts.enable.DynamicMethodInvocation" value="true" /&

struts2学习笔记(5)----------配置result

Action只负责处理请求,负责生成响应的视图组件,一般是JSP页面,而Action为JSP页面提供显示的数据.Action处理请求结束后,控制器根据<result>元素配置的逻辑视图跟物理视图之间的关系来响应. 浏览器,控制器和视图资源的顺序图如下: 如图所示,Action处理完一个请求后,并未直接把请求转发给任何具体的视图资源,而是返回给一个逻辑视图,struts2框架收到这个逻辑视图后,把请求转发到对应的物理视图资源,试图资源将结果呈现给用户. 1)result基本配置 struts2提