我们做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. java中执行javascript案例

    Nashorn js engine官方文档 https://docs.oracle.com/javase/7/docs/technotes/guides/scripting/programmer_gu ...

  2. Unity获取游戏对象详解

    我觉得Unity里面的Transform 和 GameObject就像两个双胞胎兄弟一样,这俩哥们很要好,我能直接找到你,你也能直接找到我.我看很多人喜欢在类里面去保存GameObject对象.解决G ...

  3. POJ 1185 状态DP

    这个题目是个挺难表示的状态DP,因为不但要考虑上下还要考虑左右,在DP里面就没有什么下了咯,但也至少除了考虑左右还要考虑上 所以先枚举出在同一行满足条件的状态 即 某状态 若 s&(s< ...

  4. 基于表单的web暴力破解

    暴力破解 概述 连续性尝试+字典+自动化 如果一个网站没有对登录接口实施防暴力破解的措施,或者实施了不合理的措施,则该网站存在暴力破解漏洞. 是否要求用户设置了复杂的密码 是否每次认证都是用安全的验证 ...

  5. caffe fastercbnnahdemo

    https://download.csdn.net/download/zefan7564/10148990 https://blog.csdn.net/qq_37124237/article/deta ...

  6. 洛谷 P1060开心的金明

    题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NN元钱就行”.今 ...

  7. 使用MySQL传输表空间迁移数据

    对于大表的迁移,如果使用mysqldump进行导出,然后重新导入到其它环境,速度是非常缓慢的.如果使用传输表空间,则可以解决这个问题. 测试使用传输表空间迁移表,基础环境如下:   源库 目标库 IP ...

  8. 大数据攻城狮之进阶技能-Github的使用

    引用百度百科中的介绍: github GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名GitHub. GitHub于2008年4月10日正式上线 ...

  9. Python笔记_第四篇_高阶编程_检测_1.对函数进行单元检测

    1. 对函数进行单元检测: 单元检测: 作用:用来对一个函数.一个类.一个模块进行正确性校验工作. 结果: * 单元测试通过,说明我们测试函数的功能正确. * 单元测试不通过,说明函数有BUG,要么测 ...

  10. Python笔记_第一篇_面向过程_第一部分_3.进制、位运算、编码

    通过对内存这一个部分的讲解,对编程会有一个相对深入的认识.数据结构是整个内存的一个重要内容,那么关于数据结构这方面的问题还需要对进制.位运算.编码这三个方面再进行阐述一下.前面说将的数据结构是从逻辑上 ...