冗長なタイトルで申し訳ありませんが、冗長な問題です。ある種の CMS とやり取りしようとしていますが、カスタム タグによって生成された HTML が、JSTL 変数に保存されるだけでなく、ページに出力されます。私が達成しようとしていることが可能かどうかさえわかりません。
<%-- 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
属性は内部的なものなので、心配する必要はありません。そのため、吐き出された HTMLPromoMapLookup
は変数に保存されますが、c:set
タグが呼び出されているページでレンダリングされ、さらにページの後半で変数を参照します。結果は、ページの 2 か所で同じ html になります。これはコンパイル/レンダリングの順序と関係があると感じていますが、わかりません。何か案は?