項目中審批過程需要將業務表單嵌套在審批的頁面中。由於業務表單很多,前台已經axjx到了本次選擇的表單的地址。本來做的就是把這個鏈接放在審批頁面上,但現在需求的就是直接把這個biz表單嵌套在審批的頁面中。
初步的解決方案有jsp的include和iframe三種方法。
(1)靜態include
用include偽碼實現,不會檢查所含文件的變化,適用於包含靜態頁面。使用場合主要是包含一些js包、css、系統的常量等。
語法為:
<%@include file="biz.htm" %>
(2)動態include 用jsp:include動作實現,它總是會檢查所含文件中的變化,適合用於包含動態頁面,並且可以帶參數。
語法:
<jsp:include page="/jsp/oa/biz/<%=path[1]%/<%=path[2]%>.jsp>" flush="true"> <jsp:param value="<%=piId%>" name="piId"/> <jsp:param value="view" name="action"/> </jsp:include>
其中 flush="true"
在同一個 JSP 中,如果不斷 include 自己(源文件),在邏輯上會形成死循環。若默認情況下,服務器會等待該文件被讀到底端,然後才輸出到客戶端,並且銷毀該次訪問的 request 和 response。而當把 flush 屬性賦為真值時,在緩存累積了一定數據時,服務器會先提供一部分數據給浏覽器,並等待後續內容。由此,在簡單頁面中,該屬性不納入考慮,而在頁面包含大量數據時,為縮短客戶端延遲,可將一部分內容先行輸出。該屬性在 Servlet 中也有對應的應用。
(3) 最常見的 iframe 嵌套
<iframe id="logfrm" src="login_files/loginbox.jsp" frameborder="0" scrolling="no"></iframe>
容易出現的問題
1,使用js方法時報錯 Javascript "Unterminated String Literal" Error。 對於這個問題主要是說js有空格、換行符等問題。把之間的空格去掉發現不報錯。
2,中文亂碼
在被嵌套的頁面加上一句話: <%@ page contentType="text/html;charset=UTF-8" language="java"%> 如:
<%@ page contentType="text/html;charset=UTF-8" language="java"%> <nav class="navbar navbar-default" role="navigation"> <div class="container"> <div class="navbar-header"> <a class="navbar-brand" href="/metamaintain-web/group">產品配置模塊</a> </div> <div> <ul class="nav navbar-nav"> <li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown"> 刪除任務配置 <b class="caret"></b> </a> <ul class="dropdown-menu"> <li><a href="/metamaintain-web/group">任務分組</a></li> <li><a href="/metamaintain-web/task">任務項</a></li> </ul></li> </ul> </div> <div class="navbar-header"> <a class="navbar-brand" href="/metamaintain-web/testtabs">測試標簽頁</a> </div> </div> </nav>