zoukankan      html  css  js  c++  java
  • 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这个属性是用于存储传入的参数。所以可以取出。

  • 相关阅读:
    打开百度要用几步
    web渗透总结
    mysql之基本数据类型
    网络编程
    垃圾回收机制
    常用模块-hashlib,hmac,configparser,subprocess,xlrd,xlwt,xml,re
    常用模块-random,shutil,shevle,logging
    文件操作
    元组、字典、集合数据类型
    基本数据类型之列表类型
  • 原文地址:https://www.cnblogs.com/printN/p/6441022.html
Copyright © 2011-2022 走看看