2013-03-14 25 views
0

對不起,詳細的標題,但它是一個詳細的問題。我試圖與CMS進行接口,但由我的自定義標記生成的HTML除了保存在JSTL變量中之外,還將輸出到頁面。我甚至不知道我想達到什麼是可能的。JSTL c:設置自定義JSP標記用於ATG存儲庫查找

<%-- promo.tag --%> 
<%@ tag display-name="PromoMap Lookup Tag" body-content="empty" %> 
<%@ attribute name="id" required="true" description="" %> 
<%@ attribute name="elName" required="true" description="" %> 

<%@ taglib uri="/dspTaglib" prefix="dsp" %> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c" %> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> 

<dsp:importbean bean="/promo/PromoMapLookup"/> 

<dsp:droplet name="PromoMapLookup"> 
    <dsp:param name="id" value="${id}"/> 
    <dsp:param name="elementName" value="${elName}"/> 
    <dsp:oparam name="output"> 
     <c:set var="html"><dsp:valueof param="promo.html" valueishtml="true"/></c:set> 
     <c:set var="html" value="${fn:trim(html)}"/> 
     <c:if test="${not fn:endsWith(html, '-->') and not empty html}"> 
      ${html} 
     </c:if> 
    </dsp:oparam> 
    <dsp:oparam name="empty"> 
     <%-- Nothing retrieved for promo slot id --%> 
    </dsp:oparam> 
</dsp:droplet> 

...然後調用頁面,使上述所有HTML這樣的電話:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%@ taglib tagdir="/WEB-INF/tags" prefix="pro" %> 
<c:set var="masthead"><pro:promo id="287" elName="promo" /></c:set> 

...some html... 

${masthead} 

elName屬性是內部的,所以不用擔心。所以,PromoMapLookup吐出的html會被保存到變量中,但它會在調用c:set標記的頁面上呈現,除了在頁面後面引用該變量的位置之外。結果是頁面上兩個地方的html相同。我有一種感覺,這與編譯/渲染的順序有關,但我無法弄清楚。有任何想法嗎?

+0

哪些你想做什麼?Promo.html是一個文件的名字或者是在PromoMapLookup中設置的輸出變量的名字問題是你想把它保存到一個變量中而不是顯示兩次?另外, m沒有看到兩個代碼片段之間的連接。你的tld是什麼樣的? – xdhmoore 2013-03-26 03:14:31

回答

0

所以我最終解決了這個問題。問題是我使用<dsp:valueof>標籤來檢索promo.html(促銷是對「html」字段的表的引用)。一旦我將標籤更改爲<dsp:getvalueof param="promo.html" var="html"/>並刪除了周圍的<c:set>標籤,它就完成了。

的getvalueof DSP標記允許值被直接存儲到JSTL變量,而的valueOf標籤輸出到位(該值即使它也經由<c:set>標籤捕獲到JSTL變量。