zoukankan      html  css  js  c++  java
  • 关于用struts2框架中iframe对应的jsp页面的不到action的值的问题

    我们做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
  • 相关阅读:
    Redis(八):spring data redis 理解
    RPC服务框架dubbo(六):Consumer搭建过程
    Redis(七):Jedis简介和集群
    RPC服务框架dubbo(四):Dubbo中Provider搭建
    RPC服务框架dubbo(三):Dubbo支持的协议
    RPC服务框架dubbo(二):dubbo支持的注册中心
    RPC服务框架dubbo(一):简介和原理解析
    Java数据结构和算法(一):简介
    Golang gRPC实践 连载五 拦截器 Interceptor
    Go 1.8 http graceful 体验
  • 原文地址:https://www.cnblogs.com/archermeng/p/7537510.html
Copyright © 2011-2022 走看看