8

VisualForceページからクリーンなXSL-FOを生成しようとしています。ただし、ネストされたapex:outputPanelタグ(外側のrendered = true、内側のrendered = false)によって生成されている空のスパンタグのため、VisualForceページから出力されるxmlは無効です。問題を説明する焦点を絞ったページを次に示します。

<apex:page contentType="text/xml" cache="false" showHeader="false" sidebar="false">
    <root>
        There is no reason for a nested apex:outputpanel to generate a span tag like this:  

        <apex:outputPanel layout="none" rendered="true">
            <apex:outputPanel layout="none" rendered="false" />
        </apex:outputPanel>

        This breaks strict xml documents like XSL-FO.
    </root>        
</apex:page>

そのページはこのxml出力を提供します:

<root>
    There is no reason for a nested apex:outputpanel to generate a span tag like this:

    <span id="j_id0:j_id3" style="display: none;"></span>

    This breaks strict xml documents like XSL-FO.
</root>

実際、私はドキュメントであいまいな理由を見つけました:

apex:outputPanelレイアウト属性-パネルのレイアウトスタイル。可能な値には、「block」(HTML divタグを生成する)、「inline」(HTMLスパンタグを生成する)、および「none」(HTMLタグを生成しない)が含まれます。指定しない場合、この値はデフォルトで「none」になります。ただし、レイアウトが「none」に設定されている場合、レンダリングされた属性が「false」に設定されている子要素ごとに、outputPanelは、各子のIDとスタイル属性が「display:none」に設定されたスパンタグを生成します。 。したがって、コンテンツは表示されませんが、JavaScriptはDOMIDを介して要素にアクセスできます。

コンテンツタイプがhtmlまたはjavascriptの場合は便利に聞こえますが、厳密なxmlが壊れています。したがって、問題は、スパンタグを回避しながら、ネストされた条件付きレンダリングをどのように実現できるかということです。

4

2 に答える 2

10

次のように、両方または外側のみを apex:variable に切り替えます。

<apex:variable rendered="true" value="" var="tempOuter">
    <apex:outputPanel layout="none" rendered="false" />
</apex:variable>
于 2012-09-16T04:08:09.323 に答える