【问题标题】:p:dataList rendering in Internet Explorer 8p:dataList 在 Internet Explorer 8 中呈现
【发布时间】:2013-06-27 13:03:14
【问题描述】:

我的页面包含另一个数据列表中的数据列表。外部数据列表模拟手风琴面板,而内部数据列表呈现我的动态列。

一切正常,但 Internet Explorer 8 与 Firefox 和 Chrome 的行为不同,因为在生成的 html 中它呈现了一些空对象,这些对象在数据之前留下了一个空白区域。

屏幕截图显示了 Explorer 8 和 Firefox 之间的差异。

Firefox 生成的 HTML:

Explorer 8 生成的 HTML:

Firefox 渲染:

Explorer 8 渲染:

代码如下:

<p:dataList id="data" styleClass="myDataList" value="#{bean.getAnag(idSito)}" var="tipologia" itemType="disc" type="definition">
  <div class="ui-accordion ui-widget ui-helper-reset ui-hidden-container tabAccordion" style="width: 100%;">
    <table id="accordionFake#{idSito}" border="1" class="table-din-col" style="display: none; margin-bottom: 10px;">
      <!-- HEADERS -->
      <tr class="table-din-col-titolo">
        <td style="padding: 4px;">
          <h:outputText value="Codice" />
        </td>
        <td style="padding: 4px;">
          <h:outputText value="Descrizione" />
        </td>
        <td style="padding: 4px;">
          <h:outputText value="CodiceAgg" />
        </td>
        <td style="padding: 4px;">
          <h:outputText value="Pos" />
        </td>
        <p:dataList value="#{bean.buildColumns(idSito)}" var="colDin" type="definition">
          <td>
            <h:outputText value="#{colDin.header}" />
          </td>
        </p:dataList>
      </tr>
      <!-- HEADERS -->

      <!-- ROWS BUILDING -->                        
      <p:dataList id="dataL" var="rilevazione" selectionMode="single"
                value="#{bean.getLsLoc(idSito)}" type="definition">
        <tr class="table-din-col-righe">
          <td class="table-din-col-colonne">
            <h:outputText id="codice" value="#{rilevazione.codice}" />
          </td>
          <td class="table-din-col-colonne">
            <h:outputText id="desc" value="#{rilevazione.descrizione}" />
          </td>
          <td class="table-din-col-colonne">
            <h:outputText id="codSnam" value="#{rilevazione.codiceAgg}" />
          </td>
          <td class="table-din-col-colonne">
            <h:outputText id="pos" value="#{rilevazione.pos}" />
          </td>

          <p:dataList value="#{bean.buildColumns(idSito)}" var="colDin" type="definition">
            <td class="table-din-col-colonne">
              <h:outputText value="#{colDin.property.valore}" />
            </td>
          </p:dataList>
        </tr>
      </p:dataList>
      <!-- ROWS BUILDING -->
    </table>
  </div
</p:dataList>

如何指导 ie8 正确渲染数据列表?

提前致谢。

【问题讨论】:

    标签: jsf primefaces internet-explorer-8


    【解决方案1】:

    看起来您为此目的使用了错误的组件,或者至少不理解/不熟悉基本 HTML。

    &lt;p:dataList&gt; 让您可以选择生成 HTML &lt;ul&gt;&lt;li&gt;(无序列表)、&lt;ol&gt;&lt;li&gt;(有序列表)或&lt;dl&gt;&lt;dt&gt;&lt;dd&gt;(定义列表)。

    但是,您似乎是在生成一个普通的 HTML &lt;table&gt;&lt;tr&gt;&lt;td&gt; 并且所有单元格都是硬编码的。您在 &lt;tr&gt; 内嵌套了一个 &lt;p:dataList type="definition"&gt;,它只会在预期 &lt;td&gt; 元素的位置生成 &lt;dl&gt;&lt;dt&gt;&lt;dd&gt; 元素。这只会在illegal HTML syntax 中结束。 IE 对此相当敏感。

    您应该将嵌套的&lt;p:dataList type="definition"&gt; 组件替换为&lt;ui:repeat&gt;。它不会生成任何 HTML,并且您的 HTML 最终会在语法上有效(尽管我想知道拥有 &lt;dl&gt;&lt;dt&gt;&lt;dd&gt;&lt;table&gt; 有什么意义,毕竟我建议也学习 basic HTML,以便您更好地理解哪个JSF 组件来选择)。

    【讨论】:

    • 我最终使用了这些组件,因为我需要生成带有动态列的表格,这些表格位于手风琴面板中,每个选项卡都包含一个表格(您可能想知道为什么我在里面使用表格手风琴面板,但这不在我的控制之下)。我尝试使用 p:columns,但它对我不起作用,因为它获取了错误的列(更具体地说,它总是从第一个数据表中获取列)。我会试试 ui:repeat,谢谢。
    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    相关资源
    最近更新 更多