我们做web项目经常会用到frameset、frame以及iframe,这大大方便了我们页面的构建以及模块功能的划分。但是,再使用这些技术的同时也会遇到各种各样的问题,其中一个就是子页面中得不到struts2的action的值。之前自己在做项目的时候也遇到了这个问题。在网上查阅了大量的资料,现将自己的总结与结论与大家一起分享。

frameset、frame经实践是没有问题的,如果因为种种原因也出现的话,那么请参考iframe。

现在具体讨论一下iframe的问题:

首先要明确一下出现这个问题的原因,那就是:action的ValueStack、StackContext能够做到达的范围(我暂时称它为action的作用域,不一定准确,但是便于理解)只到result跳转到的第一个jsp页面,也就是说当前action的值仅在此jsp页面可以使用,其他的页面是不可以的(其他jsp得到的值是其他action的值)。

要解决iframe的问题,上面句话必须要理解。

下面来看一下iframe的用法:
<iframe src = "***.jsp" />

可以看到,iframe的src恰恰对应的是另外的jsp页面,因此这个jsp页面是无法得到的(如果没有其他的action直接跳转的该jsp页面的话)。

那么怎么解决这个问题呢,
<iframe src = "***.action"/>

不是换后缀名,而是让iframe的src指向一个action,action对应的方法完成相应的增删查改操作,最后返回一个页面,那么这个页面就在此iframe中使用了

为便于家理解,下面粘贴一个例子,供大家参考:

mainFrame.jsp
<%@ page language="java" import="java.util.*"pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN">
<html>
  <head>
   <title></title>
  </head>
  <body>
<iframe name="A" src = "Blog_list"/><!-- Blog_list:BlogAction.java的list方法 -->
<iframe name="B" src = "Blog_menu"/><!-- Blog_menu:BlogAction.java的menu方法 -->
  </body>
</html>


struts.xml

<package name="front" namespace="/"extends="struts-default">     
    <!--第一个*代表你用的哪个action,第二*个是你用的哪个方法 -->
      <action name="*_*"class="com.blog.action.{1}Action"method="{2}">
       <resultname="menu">/menu.jsp</result>     
          <resultname="list">/list.jsp</result> 
      </action> 
</package>


BlogAction.java

public String menu(){
menus = blogService.getMenu();
return "menu";
}
public String list(){
blogs = blogService.getList();
return "list";
}


menu.jsp

<%@ page language="java" import="java.util.*"pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN">
<html>
  <head>
   <title></title>
  </head>
  <body>
<s:iterator value="menus">   
<s:property value="menu">
</s:iterator>
  </body>
</html>


list.jsp

<%@ page language="java" import="java.util.*"pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN">
<html>
  <head>
   <title></title>
  </head>
  <body>
<s:iterator value="blogs">   
<s:property value="title">
</s:iterator>
  </body>
</html>

如果弄清楚了就是这样简单,但是对于习惯传统写法的这里有个问题,那就是以前都是同一查询,然后在页面里统一显示

BlogActon.java

public String list(){
menus = blogService.getMenu();
blogs = blogService.getList();
return "success";
}


blog.jsp

<%@ page language="java" import="java.util.*"pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN">
<html>
  <head>
   <title></title>
  </head>
  <body>
<s:iterator value="menus">   
<s:property value="menu">
</s:iterator>

<s:iterator value="blogs">   
<s:property value="title">
</s:iterator>
  </body>
</html>

但现在却是:由大化小,由繁化简,朝着一个action的方法解决一个功能方向前进,但是这也正是我们需要的。
鉴于本人技术有限只能分析到此,如有什么问题希望大家指正。



转载地址:http://blog.sina.com.cn/s/blog_4f8d3e340100v3xc.html

关于用struts2框架中iframe对应的jsp页面的不到action的值的问题的更多相关文章

  1. 请求在Struts2框架中的处理步骤

    上图来源于Struts2官方站点,是Struts 2 的整体结构. 一个请求在Struts2框架中的处理大概分为以下几个步骤 1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求 2 ...

  2. Struts2框架中使用Servlet的API示例

    1. 在Action类中也可以获取到Servlet一些常用的API * 需求:提供JSP的表单页面的数据,在Action中使用Servlet的API接收到,然后保存到三个域对象中,最后再显示到JSP的 ...

  3. 在Struts2框架中使用Servlet的API

    1. 在Action类中也可以获取到Servlet一些常用的API * 需求:提供JSP的表单页面的数据,在Action中使用Servlet的API接收到,然后保存到三个域对象中,最后再显示到JSP的 ...

  4. 5.Struts2框架中的ServletAPI如何获取

    1.完全解耦合的方式 如果使用该种方式,Struts2框架中提供了一个类,ActionContext类,该类中提供一些方法,通过方法获取Servlet的API 一些常用的方法如下 * static A ...

  5. jQuery 获取jsp页面中用iframe引入的jsp页面中的值

    <iframe scrolling="no" src="<c:url value='/unitBaseperson/view.do?para=9&op ...

  6. 在JSP页面中调用另一个JSP页面中的变量

    在jsp学习中,经常需要在一个jsp页面中调用另一个jsp页面中的变量,下面就这几天的学习,总结一下. jsp页面之间的变量调用有多种方法: 1.通过jsp的内置对象—request对象获取参数: ( ...

  7. JSP页面中引入另一个JSP页面

    一个JSP页面中引入另一个JSP页面,相当于把另一个JSP页面的内容复制到对应位置: <%@include file="date.jsp" %> 一般页面的top和bo ...

  8. 一个请求在Struts2框架中的处理流程

    1.客户端向Servlet容器发起一个请求,将请求封装为HttpServletRequest对象. 2.HttpServletRequest首先经过web.xml中配置的struts2的过滤器,以及s ...

  9. 在Struts2框架中使用OGNL表达式(在jsp页面中使用OGNL表达式)

    1. Struts2引入了OGNL表达式,主要是在JSP页面中获取值栈中的值 2. 具体在Struts2中怎么使用呢?如下步骤 * 需要先引入Struts2的标签库(在JSP页面的最上面位置) > ...

随机推荐

  1. python里类的概念

    Python编程中类的概念可以比作是某种类型集合的描述,如"人类"可以被看作一个类,然后用人类这个类定义出每个具体的人--你.我.他等作为其对象.类还拥有属性和功能,属性即类本身的 ...

  2. eclipse默认的WebContent目录修改为webRoot

    从网上下载了个Java Web项目,导入Eclipse后在Tomcat中发布,发现在Tomcat的Webapps目录下没有JSP页面 到项目中去看才发现有两个目录,一个WebContent,一个Web ...

  3. 工程日记之ChildLost(1):URLSession

    URLSession 是什么 URL Loading System提供了访问URL资源的系统,提供了访问http/https/自定义URL访问的接口.其中,URLSession实例可以创建多个URLS ...

  4. 一维消消乐(DP)

    一维消消乐是一款非常简单的游戏.有n颗珠子排成一排,每一颗珠子有一个价值w(可能是负数). 游戏是这样,你可以选择如若干对相邻的珠子,让他们同时消去.每一对珠子的消失,都会使得总分数加上两颗珠子相乘的 ...

  5. cmd 删除整个目录

    rmdir 删除整个目录好比说我要删除 222 这个目录下的所有目录和档案,这语法就是: rmdir /s/q 222 其中: /s 是代表删除所有子目录跟其中的档案. /q 是不要它在删除档案或目录 ...

  6. PAT Advanced 1066 Root of AVL Tree (25) [平衡⼆叉树(AVL树)]

    题目 An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child ...

  7. 洛谷 P1113 杂务(vector)

    题目传送门 解题思路: 本题说有些杂务是有前提条件的,而有一个特性就是某个杂务的前提一定在这个杂务前面输入,那么,这个题就瞬间沦为了黄题.对于那些有前提条件的杂务,我们只需要找它的前提条件中最晚完成的 ...

  8. linux文件软链接与硬链接

    1.命令格式: ln [参数][源文件或目录][目标文件或目录] 软链接只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间. 2.命令功能: Linux文件系统中,有所谓的链接(link),我们 ...

  9. JavaScript数组去重(5种方法)

    // 数组去重 let arr = ['a', 'b', 'b', 1, 1, 'true', true, true, NaN, NaN, 'NaN', undefined, undefined, n ...

  10. Istio流量治理原理之负载均衡

    流量治理是一个非常宽泛的话题,例如: ● 动态修改服务间访问的负载均衡策略,比如根据某个请求特征做会话保持: ● 同一个服务有两个版本在线,将一部分流量切到某个版本上: ● 对服务进行保护,例如限制并 ...