我们做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. DLL对应的导入库一定会生成的

    测试代码: #pragma once #define TESTDEPEND_EXPORTS #ifdef TESTDEPEND_EXPORTS #define TESTDEPEND_API __dec ...

  2. 2014_csu选拔1_B

    Description Here is no naked girl nor naked runners, but a naked problem: you are to find the K-th s ...

  3. LeetCode No.166,167,168

    No.166 FractionToDecimal 分数到小数 题目 给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数. 如果小数部分为循环小数 ...

  4. css实现高度自适应

    要求.上部固定高度50px,下部分自适应剩下整个屏幕 html, body { height: 100%; margin: 0px; padding: 0px; } #main { backgroun ...

  5. ICRA 2019最佳论文公布 李飞飞组的研究《Making Sense of Vision and Touch: Self-Supervised Learning of Multimodal Representations for Contact-Rich Tasks》获得了最佳论文

    机器人领域顶级会议 ICRA 2019 正在加拿大蒙特利尔举行(当地时间 5 月 20 日-24 日),刚刚大会公布了最佳论文奖项,来自斯坦福大学李飞飞组的研究<Making Sense of ...

  6. vue title悬停

    title 设置name="peo" title="" v-on:mouseenter="peoAndCarHover(item.signStatus ...

  7. 在阿里做了5年技术Leader,我总结出这些套路!

    转自 51CTO技术栈 内容 团队建设 团队管理 团队文化 沟通与辅导 招聘与解雇 互联网公司的技术团队管理通常分为两个方向:技术管理和团队管理,互联网公司的技术 TL 与传统软件公司的 PM 还是有 ...

  8. 干货 | IP高防使用配置

    一.知识简介 DoS(Denial of Service),即拒绝服务攻击.该攻击是利用目标系统网络服务功能缺陷或者直接消耗其系统资源,目的是使该目标客户的系统不可用,无法提供正常的服务. DDoS( ...

  9. 吴裕雄--天生自然Linux操作系统:Linux 简介

    Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的. Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 PO ...

  10. Electron基础 - 如何创建模态窗体

    在开发桌面端应用我们常常需要弹出一个提示窗体或者对话框,而提示窗体和对话框和普通窗体的区别是,在提示框出现时,其它窗体就被锁定了,必须要等到提示框被正确关闭时其它窗体才能“解锁”,这种类型的窗体叫做模 ...