關於用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