2013-06-03 25 views
1

在我的JSF應用程序的頁面模板中,我使用ui:repeat來遍歷一些數據來構建HTML表格。我想爲此使用基本的HTML標籤,而不是像h:dataTable這樣的東西,因爲當我嘗試將某些樣式和JavaScript事件應用於該標籤時,它們沒有出現在正確的元素上。但是,當使用ui:repeat達到此目的時,我發現它會在不適當的地方添加無效的trtd以打開結束標記。爲什麼JSF的UI:重複添加無效標籤到我的HTML?

頁面模板,具有類似下面的代碼:

<table border="1" style="width: 100%;"> 
    <ui:repeat var="row" value="#{bean.testData}"> 
     <tr> 
      <ui:repeat var="column" value="#{bean.testData}"> 
       <td>#{row}, #{column}</td> 
      </ui:repeat> 
     </tr> 
    </ui:repeat> 
</table> 

其實我想要做的事比這更復雜,但是這是問題的最簡單的例子。

Bean包含:

private final String[] testData = {"fu", "bar"}; 

public String[] getTestData() { 
    return this.testData; 
} 

的這個輸出是:

<table border="1" style="width: 100%;"></td> 
</tr> 
<tr> 
<td> 
    <tr> 
     <td>fu, fu</td> 
     <td>fu, bar</td> 
    </tr> 
    <tr> 
     <td>bar, fu</td> 
     <td>bar, bar</td> 
    </tr></td> 
</tr> 
<tr> 
<td> 
</table> 

我預期的輸出,怎麼會是:

<table border="1" style="width: 100%;"> 
    <tr> 
     <td>fu, fu</td> 
     <td>fu, bar</td> 
    </tr> 
    <tr> 
     <td>bar, fu</td> 
     <td>bar, bar</td> 
    </tr> 
</table> 

我想不出爲什麼JSF在ui:repeat循環輸出的開頭和結尾添加了這個:

</td> 
</tr> 
<tr> 
<td> 

在Google Chrome和Firefox中,這會導致在表格頂部和底部包含單個空單元的額外行。

有關如何防止這種情況的任何想法?

更新:我沒有想到提及我生成的這個表格會出現在h:panelGrid元素內。我不知道這是否會對這個問題產生影響。

+0

測試,在我的身邊工作正常(鑽嘴魚科2.1.14)。 –

回答

1

按照更新後,你需要封裝代碼中的JSF標籤中是這樣的:

<h:panelGrid> 
    <ui:fragment> 
     <table border="1" style="width: 100%;"> 
      <ui:repeat var="row" value="#{bean.testData}"> 
       <tr> 
        <ui:repeat var="column" value="#{bean.testData}"> 
         <td>#{row}, #{column}</td> 
        </ui:repeat> 
       </tr> 
      </ui:repeat> 
     </table> 
    </ui:fragment> 
</h:panelGrid> 

Ortherwise的h:panelGrid的渲染將無法在細胞分裂正確的嵌套內容。 h:panelGrid僅用於處理JSF組件。

更多信息:

+0

謝謝!現在我明白了這一點很有意義。如果我使用'h:panelGroup'而不是'ui:fragment',它會有所作爲嗎? –

+0

@LS,它不會工作,只需要封裝,因爲'h:panelGrid'需要JSF標籤! –

+0

明白了。我想我可能會使用'h:panelGroup',如果我需要一些屬性像'rendered'等。再次感謝! –

相關問題