[工作bug]c:import參數傳遞問題解析


一、起因:

  在項目的工廠中,由於某個界面根據產品種類顯示的產品屬性均不相同,所以決定將界面進行拆分,將每一個產品寫入一個jsp界面,分別命名為product0.jsp、product1.jsp,在主界面根據產品id,分別用<c:import>標簽引入對應的界面即可。

  這樣做的好處是:將可變得界面進行解耦之后,如果增加一個產品,僅需增加一個界面即可,不會影響到其他界面的元素,便於橫向擴展,減少了原來主界面的代碼量,提升了維護性。

  因為引入界面時候,有一個參數需要傳遞到被引入界面,卻引發了個小小的疑問,經過查找,最終解決了,此處記錄解決經歷,以備以后參考。

二、問題描述

  jsp界面中引入界面有:

  1、<c:import url="inlayingJsp.jsp"></c:import>  

  2、<%@ include file="inlayingJsp.jsp" %>  

  3、<jsp:include   page="inlayingJsp.jsp" flush="true"/> 

  我的工作中,主要使用jstl進行編輯jsp界面,所以選擇第一種。如果網被引入界面傳遞參數,第一反應是如下寫法

<c:import url="inlayingJsp.jsp?opType=edit"></c:import>  

  可是在子界面以${opType},取值為空。

  懷疑是否沒有傳遞過來,查了下標簽的使用方法,將參數的傳遞方法改為

<c:import url="inlayingJsp.jsp">
    <c:param name="opType" value="edit"/>
</c:import> 

  這是標准的jstl的傳遞參數寫法,但是很不幸,仍然無法取到值。

  接着研究了下標簽,發現其他參數,比如var,可是嘗試后還是不行。

  在網上看到有一篇文章,將百度引為子頁,語法為:

<c:import url="https://www.baidu.com/s">
    <c:param name="wd" value="搜索內容"/>
</c:import> 

  試了下,子頁不但顯示了百度,而且確實進入了搜索界面。於是考慮之前子頁獲取參數的方法是否有誤。

  試了下標准的jsp寫法,可以正確獲取到值:  

<% 
    String opType=request.getParameter("opType");
    out.print(opType);
%>

  問題鎖定為el表達式有問題,繼續google之,正確寫法為:

${param.opType}

三、結論

  問題其實很小,但也花了快一個小時,回想起來主要是一直使用jstl進行界面編寫,缺乏對原生jsp的研究,以后要記得改進。

  

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM