Struts2中带参数的结果集

 

 

2.首先,新建一个struts2项目,项目名为ResultParam,打开index.jsp页面,修改编码格式为utf-8,添加一个超链接,用于向结果集传参数,完整代码如下:

 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
 2 <%  
 3 String path = request.getContextPath();  
 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
 5 %>  
 6   
 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
 8 <html>  
 9   <head>  
10     <base href="<%=basePath%>">  
11       
12     <title>My JSP 'index.jsp' starting page</title>  
13     <meta http-equiv="pragma" content="no-cache">  
14     <meta http-equiv="cache-control" content="no-cache">  
15     <meta http-equiv="expires" content="0">      
16     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
17     <meta http-equiv="description" content="This is my page">  
18     <!-- 
19     <link rel="stylesheet" type="text/css" href="styles.css"> 
20     -->  
21   </head>  
22     
23   <body>  
24     <ol>  
25     <li><a href="user/user?type=1">传递参数</a></li>  
26     </ol>  
27   </body>  
28 </html>  

 

 

相应的struts.xml配置文件的配置如下:

 

 1 <?xml version="1.0" encoding="UTF-8" ?>  
 2 <!DOCTYPE struts PUBLIC  
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
 4     "http://struts.apache.org/dtds/struts-2.0.dtd">  
 5   
 6 <struts>  
 7   
 8     <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>  
 9     <constant name="struts.devMode" value="true"></constant>  
10     <package name="user" namespace="/user" extends="struts-default">    
11         <action name="user" class="com.gk.UserAction">  
12             <result type="redirect">/user_success.jsp?t=${type}</result>  
13         </action>  
14     </package>  
15 </struts>  

 


 

 

接着新建一个Action类,为UserAction类,用来指定一个成员变量type,添加set和get方法,并添加一个默认的execute方法,返回类型为String

返回"success"的话就重定向到/user_success.jsp?t=${type}页面上去

 

UserAction类代码如下:

 
  1.  1 package com.gk;  
     2   
     3 public class UserAction {  
     4     private int type;  
     5   
     6     public int getType() {  
     7         return type;  
     8     }  
     9   
    10     public void setType(int type) {  
    11         this.type = type;  
    12     }  
    13   
    14     public String execute() {  
    15         return "success";  
    16     }  
    17 }  

     

当我们点击index.jsp页面下的传递参数超链接时,执行Action后,已经将Action的成员属性写入了值堆栈了

因此可以在配置文件中使用OGNL表达式${type}取出type的值

所以当result重定向到/user_success.jsp?t=${type}时,在地址栏上面是可以显示出index.jsp页面中的type=1这个值。

 

但是只有Action才具有值堆栈的,对于JSP页面来说是没有什么值堆栈的。

因为在result重新定向到/user_success.jsp?t=${type}后,是不能从值堆栈中取出t的值,只能从ActionContext里取出t的值,即Action的上下文环境中取出,就可以在jsp页面中读取出t的值了,可以使用ActionContext Stack的parameters参数读取。

 

 

user_success.jsp页面代码如下:

 

 
  1.  1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
     2 <%@ taglib uri="/struts-tags"  prefix="s"%>  
     3 <%  
     4 String path = request.getContextPath();  
     5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
     6 %>  
     7   
     8 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
     9 <html>  
    10   <head>  
    11     <base href="<%=basePath%>">  
    12       
    13     <title>My JSP 'user_success.jsp' starting page</title>  
    14       
    15     <meta http-equiv="pragma" content="no-cache">  
    16     <meta http-equiv="cache-control" content="no-cache">  
    17     <meta http-equiv="expires" content="0">      
    18     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
    19     <meta http-equiv="description" content="This is my page">  
    20     <!-- 
    21     <link rel="stylesheet" type="text/css" href="styles.css"> 
    22     -->  
    23   
    24   </head>  
    25     
    26   <body>  
    27     返回成功  
    28     来自值栈:<s:property value="t"/><br/>  
    29     来自ActionContext:<s:property value="#parameters.t"/><br/>  
    30       
    31     <s:debug></s:debug>  
    32   </body>  
    33 </html>  

     

注:<s:property value="t"/>取不到值,因为jsp不是一个Action没有值堆栈。
      <s:property value="#parameters.t"/>可以取出t的值,因为#方式是从ActionContext中取属性值。ActionContext堆栈中具有parameters这个属性是用于存储传入的参数。所以可以取出。

 

等一会我们可以看下value stack(值栈)里的东西和ActionContext(Action的上下文环境)里面的东西。

 

 

3.接着我们部署这个项目到Tomcat服务器上,开启Tomcat服务器,输入相应的地址,运行结果如下:

 

 

点击传递参数超链接后,如下图所示:

 

其中重定向时传递了type这个参数,并从ActionContext中获取到了t的值,值栈中却获取不到,接着我们点击Debug按钮,看下里面的内容:

 

其中值栈里面没有t的相关内容,我们可以看下栈的上下文,即Stack Context,也是ActionContext里的内容,

栈的上下文环境,这些选项要使用#key的形式初始化。

在user_success.jsp页面中,使用#parameters.t的形式取得t的值,我们可以去找下有无parameters这个key,并且内容究竟有没有t:

上图中有parameters这个key,并且里面也有一个t,在红色框框的下面,ActionContext堆栈中具有parameters这个属性是用于存储传入的参数。所以可以取出。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值