關於用struts2架構中iframe對應的jsp頁面的不到action的值的問題__div

來源:互聯網
上載者:User
我們做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
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.