2011-09-07 21 views
4

如何在outputLabel中引用每個單獨的複選框,以便當我點擊該項目的標籤時,它實際上與單擊複選框時相同?什麼是標籤對於selectBooleanCheckbox的'for'標識

<rich:dataGrid value="#{all}" var="item" columns="3"> 
    <h:outputLabel value="#{item.name}" for="what_here?" /> 
    <h:selectBooleanCheckbox value="#{item.selectedForLaterUse}" id="item#{item.id}" /> 
</rich:dataGrid> 

在首先出現在腦海一種可能性是當然

for="item#{item.id}" 

但由於JSF ID是相對的,這是行不通的,對嗎?

還有一個選擇使用selectManyCheckbox,但似乎沒有給出使用列的選項。

回答

7

你不需要這樣做。 JSF爲你做。只要指定一個固定ID,只要它在相同的範圍內即可。

<rich:dataGrid value="#{all}" var="item" columns="3"> 
    <h:outputLabel value="#{item.name}" for="item" /> 
    <h:selectBooleanCheckbox value="#{item.selectedForLaterUse}" id="item" /> 
</rich:dataGrid> 

JSF將相應地生成正確的HTML。在瀏覽器中打開頁面,右鍵單擊並執行查看源代碼可自己查看。生成的HTML元素ID在這種情況下由所有父組件NamingContainer和當前項目索引組成。

下面是生成的輸出的一個例子,假設你給所有NamingContainer組件,如<h:form id="form"><rich:dataGrid id="grid">(否則JSF將自動生成的ID喜歡j_idt1等等,這完全正常工作的很好,但不是一個固定的ID立即可讀):

<table id="form:grid" class="rf-dg"> 
    <tbody id="form:grid:dgb" class="rf-dg-body"> 
    <tr class="rf-dg-r"> 
     <td class="rf-dg-c"> 
     <label for="form:grid:0:item">one</label> 
     <input id="form:grid:0:item" type="checkbox" name="form:grid:0:item" /> 
     </td> 
     <td class="rf-dg-c"> 
     <label for="form:grid:1:item">two</label> 
     <input id="form:grid:1:item" type="checkbox" name="form:grid:1:item" /> 
     </td> 
     <td class="rf-dg-c"> 
     <label for="form:grid:2:item">three</label> 
     <input id="form:grid:2:item" type="checkbox" name="form:grid:2:item" /> 
     </td> 
    </tr> 
    </tbody> 
</table> 
+0

謝謝你的詳細解答! – egaga

+0

不客氣。 – BalusC