0

冗長なタイトルで申し訳ありませんが、冗長な問題です。ある種の 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 になります。これはコンパイル/レンダリングの順序と関係があると感じていますが、わかりません。何か案は?

4

1 に答える 1

0

だから私はこの問題を解決することになりました。問題は、<dsp:valueof>タグを使用して promo.html を取得していたことです (promo は、フィールド「html」を持つテーブルへの参照です)。タグを変更し<dsp:getvalueof param="promo.html" var="html"/>て周囲の<c:set>タグを削除すると、すべてうまくいきました。

getvalueof DSP タグを使用すると、値を JSTL 変数に直接格納できますが、valueof タグは値をその場で出力します (タグを介して JSTL 変数にもキャプチャされますが) <c:set>

于 2013-04-24T04:46:52.440 に答える