2009-12-30 9 views
8

मेरे पास जेएसएफ वेब एप्लिकेशन में एचटीएमएल टेबल है। मैं <ui:repeat> का उपयोग कर गतिशील रूप से पंक्तियां उत्पन्न कर रहा हूं। मैं प्रत्येक पंक्ति के लिए एक काउंटर चाहता हूँ। मैं यह कैसे प्राप्त कर सकता हूं? कोई मदद?एचटीएमएल टेबल पंक्ति के लिए पंक्ति काउंटर

समृद्ध चेहरे डेटा पंक्ति में पंक्ति के लिए Ssimilar।

उत्तर

11

आप richfaces उपयोग कर रहे हैं के बाद से, आप अपनी यात्रा टैग (<a4j:repeat>) है, जो <c:forEach> का उपयोग करने से थोड़ा अधिक उपयुक्त है के साथ यह कर सकते हैं, और जो <ui:repeat>

<table> 
    <a4j:repeat value="#{bean.list}" var="item" rowKeyVar="idx"> 
     <tr> 
      <td><h:outputText value="#{idx + 1}" /></td> 
      <td><h:outputText value="#{item.someProperty}" /></td> 
      <td><h:outputText value="#{item.otherProperty}" /></td> 
     </tr> 
    </a4j:repeat> 
</table> 
6

आप इसे ui:repeat के साथ अच्छी तरह से नहीं कर सकते हैं, लेकिन आप h:dataTable के साथ ऐसा कर सकते हैं। बैकिंग बीन में घटक को UIData संपत्ति में बाध्य करें।

<h:dataTable binding="#{bean.table}" value="#{bean.list}" var="item"> 
    <h:column><h:outputText value="#{bean.table.rowIndex + 1}" /></h:column> 
    <h:column><h:outputText value="#{item.someProperty}" /></h:column> 
    <h:column><h:outputText value="#{item.otherProperty}" /></h:column> 
</h:dataTable> 

यहाँ मैं UIData#getRowIndex() करने के लिए 1 द्वारा जोड़ा जा रहा है क्योंकि यह है शून्य आधारित: यह एक getRowIndex() विधि है जो वास्तव में करता है कि तुम क्या जरूरत है। डेटाटाबल्स के बारे में अधिक जानने के लिए आपको Using datatables आलेख उपयोगी हो सकता है।

आप वास्तव में तालिका लेआउट पर थोड़ा अधिक नियंत्रण चाहते हैं (विशेष रूप से colspans/rowspans, जो असली JSF h:dataTable टैग की कमी है का उपयोग करते हुए), तो एक विकल्प JSTL c:forEach टैग जो एक varStatus विशेषता है उपयोग करने के लिए है जो आपको लूप स्थिति के लिए एक संभाल देता है।

<table> 
    <c:forEach items="#{bean.list}" var="item" varStatus="loop"> 
     <tr> 
      <td><h:outputText value="#{loop.index + 1}" /></td> 
      <td><h:outputText value="#{item.someProperty}" /></td> 
      <td><h:outputText value="#{item.otherProperty}" /></td> 
     </tr> 
    </c:forEach> 
</table> 
+0

मैं दूसरे दृष्टिकोण की कोशिश करूंगा। c: foreach। धन्यवाद बलुस – crazyTechie

+2

'c: forEach' का बड़ा नुकसान यह है कि आप आसानी से तालिका में इनपुट घटकों का उपयोग नहीं कर सकते हैं। 'एच: डेटाटेबल' के साथ आप आसानी से एक संपादन योग्य डेटाटेबल बना सकते हैं और जेएसएफ पूरी तरह इकट्ठा करने और अपडेट करने के लिए सभी डेटा प्रबंधित करेगा। – BalusC

0

UI में प्रत्येक पंक्ति के लिए कोई काउंटर नहीं है: दोहराना। जैसा कि बलुस ने कहा था कि आप एच के लिए जा सकते हैं: डेटाटेबल। एक अन्य विचार अप्रत्यक्ष रूप से आप सर्वरसाइड में सूची में प्रत्येक ऑब्जेक्ट के लिए बीन में एक अतिरिक्त अनुक्रमणिका विधि जोड़ सकते हैं और इसे जेएसएफ में प्राप्त कर सकते हैं और इसे कुशल बना सकते हैं।

19

के लिए एक विस्तार Facelets के रूप में की तरह है 2.0, अब यह varStatus का उपयोग कर संभव है।

<ui:repeat varStatus="status" var="user" value="#{collection}"> 
    #{status.index} 
</ui:repeat> 
0

एक बुरा (या अच्छा विचार) जावास्क्रिप्ट उपयोग कर रहा है कि चाल करना है।

<script> 
    var numberOfIndex = 0; 
</script> 
<ui:repeat value="#{modelBean.listUser}" var="item"> 
    <tr> 
      <td><script>numberOfIndex -=-1;document.write(numberOfIndex);</script></td> 
     <td>${item.id}</td> 
     <td>${item.name}</td> 
    </tr> 
</ui:repeat>