我正在尝试从 VisualForce 页面生成干净的 XSL-FO。但是由于嵌套的 apex:outputPanel 标记(外部渲染=true,内部渲染=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 span 标签)和“none”(不生成 HTML 标签)。如果未指定,此值默认为“无”。但是,如果 layout 设置为“none”,对于每个 render 属性设置为“false”的子元素,outputPanel 生成一个 span 标签,每个子元素的 ID 和 style 属性设置为“display:none” . 因此,虽然内容不可见,但 JavaScript 仍然可以通过 DOM ID 访问元素。
如果我的内容类型是 html 或 javascript,这听起来很有用,但它打破了我严格的 xml。那么问题来了:如何在避免span标签的同时实现嵌套条件渲染?