Chinaunix首页 | 论坛 | 博客
  • 博客访问: 284804
  • 博文数量: 93
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 830
  • 用 户 组: 普通用户
  • 注册时间: 2016-02-25 10:44
个人简介

一杯茶,一台电脑

文章分类

全部博文(93)

文章存档

2018年(4)

2017年(57)

2016年(32)

分类: Java

2017-06-24 13:44:54


传递参数:文章1  转自:http://blog.csdn.net/hackerain/article/details/6990071

struts2中,Action之间如何传递参数。Action间的参数传递是在struts.xml文件中进行配置的,在result元素中,用param标签指定传递参数的名字和值,但是这个参数名,不是随便写的,要和将要传递给的Action中的属性名相对应。下面举例来说明一下。


示例:有一个Login.jsp页面,有用户名和密码两个元素,要将数据提交到Action1中,Action1再请求转发或者重定向到Action2中,在Action1请求转发或者重定向到Action2的过程中,要将用户名和密码两个参数,外加一个自定义的不变参数,传递到Action2中。Action2接收到参数,将参数显示到一个结果页面:result.jsp

  1. Login.jsp:
  2. <form action="/struts2/test/action1" method="post">
  3.         姓名:<input type="text" name="username"/><br/>
  4.         密码:<input type="password" name="password"/><br/>
  5.         <input type="submit" value="提交"/>
  6.         <input type="hidden" name="type" value="something"/>
  7.     </form>


  1. struts.xml:
  2. <action name="action1" class="com.suo.actions.Action1">
  3.      <result name="success" type="redictAction"><!--type指定是请求转发还是重定向-->
  4.          <param name="actionName">action2</param><!--在这里指定要请求转发或是重定向到的Action-->
  5.                  
  6.          <param name="username">${username}</param>
  7.          <param name="password">${password}</param><!--action1中的属性值-->
  8.          <param name="myparam">piao</param><!-- 自定义的不变参数 -->
  9.                  
  10.          <!--在这里定义的参数,在传到的Action中,都要有相应的set/get方法,才能够得到该参数 ,
  11.                      并且在传递到的Action中的属性名,要和参数的name保持一致-->
  12.      </result>
  13. </action>
  14.          
  15. <action name="action2" class="com.suo.actions.Action2">
  16. <span>    </span><result name="success">/WEB-INF/result/action.jsp</result>
  17. </action>


  1. Action1.java:

  2. package com.suo.actions;

  3. import com.opensymphony.xwork2.ActionSupport;

  4. public class Action1 extends ActionSupport {
  5.     
  6.     private String username;
  7.     private String password;
  8.     
  9.     public String getUsername() {
  10.         return username;
  11.     }
  12.     public void setUsername(String username) {
  13.         this.username = username;
  14.     }
  15.     public String getPassword() {
  16.         return password;
  17.     }
  18.     public void setPassword(String password) {
  19.         this.password = password;
  20.     }
  21.     
  22.     public String execute()
  23.     {
  24.         System.out.println(type);
  25.         return SUCCESS;
  26.     }
  27. }


  1. Action2.java:

  2. package com.suo.actions;

  3. import com.opensymphony.xwork2.ActionSupport;

  4. public class Action2 extends ActionSupport {
  5.     
  6.     private String username;
  7.     private String password;
  8.     private String myparam;
  9.     
  10.     public String getUsername() {
  11.         return username;
  12.     }
  13.     public void setUsername(String username) {
  14.         this.username = username;
  15.     }
  16.     public String getPassword() {
  17.         return password;
  18.     }
  19.     public void setPassword(String password) {
  20.         this.password = password;
  21.     }
  22.     
  23.     public String getMyparam() {
  24.         return myparam;
  25.     }
  26.     public void setMyparam(String myparam) {
  27.         this.myparam = myparam;
  28.     }
  29.     public String execute()
  30.     {
  31.         System.out.println(username);
  32.         System.out.println(password);
  33.         System.out.println(myparam);
  34.         
  35.         return SUCCESS;
  36.     }
  37. }


  1. result.jsp:

  2. <body>
  3.        username:<s:property value="username"/><br>
  4.        password:<s:property value="password"/><br>
  5.        myparam:<s:property value="myparam"/><br>
  6.        
  7.        <!-- 这里可以用标签得到的属性值,必须是在Action中有对应的set/get方法才可以 -->
  8.        
  9.   </body>



struts2.xml 中result type属性说明   转自:http://blog.csdn.net/voyage_mh1987/article/details/5829163

chain
    用来处理Action链,被跳转的action中仍能获取上个页面的值,如request信息。
       com.opensymphony.xwork2.ActionChainResult   


dispatcher  
    用来转向页面,通常处理JSP    
    org.apache.struts2.dispatcher.ServletDispatcherResult    


freemaker 
    处理FreeMarker模板    
    org.apache.struts2.views.freemarker.FreemarkerResult    


httpheader  
    控制特殊HTTP行为的结果类型  
     org.apache.struts2.dispatcher.HttpHeaderResult  
  
stream 
     向浏览器发送InputSream对象,通常用来处理文件下载,还可用于返回AJAX数据   
     org.apache.struts2.dispatcher.StreamResult     


velocity 
     处理Velocity模板   
     org.apache.struts2.dispatcher.VelocityResult    


xslt  
     处理XML/XLST模板 
     org.apache.struts2.views.xslt.XSLTResult    


plainText    
    显示原始文件内容,例如文件源代码
     org.apache.struts2.dispatcher.PlainTextResult  


redirect    
      重定向到一个URL ,被跳转的页面中丢失传递的信息,如request 
     org.apache.struts2.dispatcher.ServletRedirectResult   


redirectAction   
     重定向到一个Action ,跳转的页面中丢失传递的信息,如request   
     org.apache.struts2.dispatcher.ServletActionRedirectResult    


redirect-action   
    重定向到一个Action ,跳转的页面中丢失传递的信息,如request      
    org.apache.struts2.dispatcher.ServletActionRedirectResult 


注:redirect与redirect-action区别
一、使用redirect需要后缀名 使用redirect-action不需要后缀名 
二、type="redirect" 的值可以转到其它命名空间下的action,而redirect-action只能转到同一命名空下的 action,因此它可以省略.action的后缀直接写action的名称。  

  1. <!--如:-->
  2. <result name="success" type="redirect">viewTask.action</result>
  3. <result name="success" type="redirect-action">viewTask</result>
附:redirect-action 传递参数

  1. <action name="enterpreinfo" class="preinfoBusinessAction" method="enterPreinfoSub">
  2.   <result name="success" type="redirect-action">
  3.      showpreinfo?preinfo.order_number=${preinfo.order_number}&amp;preinfo.company_name=${preinfo.company_name}
  4.   </result>
  5.  <result name="error" type="redirect">
  6.     <param name="location">/error.jsp</param>
  7.  </result>
  8. </action>

   因为使用了redirect-action,所以要注意不能将 showpreinf?preinfo.order_number=${preinfo.order_number}写成 showpreinf.action?preinfo.order_number=${preinfo.order_number}

其中${}为EL表达式,获取action:enterpreinfo中属性的值;在这个配置文件里,多个参数的连接符使用了"&",但XML的语法规范,应该使用"&"代替"&",原理和HTML中的转义相同,开始没有注意,在struts分析配置文件时,总是报出这样的错误:

json   一般很容易忽略的一个地方(在EXT中非常有用)
示例
	
	
  1. <package name="struts2" extends="json-default" namespace="/">
  2.         <action name="login" class="loginAction" method="login">
  3.             <result type="json">
  4.                 <param name="includeProperties">success,result</param>                
  5.             </result>                
  6.         </action>
  7.         <action name="main" class="loginAction" method="main">
  8.             <result name="main">/index.jsp</result>            
  9.         </action>    
  10.     </package>
  1. private boolean success = true;
  2. private String result = "main.action";
  3. //getter和setter方法略
以上的success和result互相对应到了
	
	
  1. <param name="includeProperties">success,result</param>
struts2会根据其设置的值匹配跳转
对于json一般情况下很少用到,但是在处理ext的时候会用到这个属性类型,这个地方也是经常被忽略的。





 


阅读(641) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~