2013-03-14 28 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变量。