JSF2.0

2012-12-20 7 views
5

में गतिशील रूप से डेटाटेबल बनाना और पॉप्युलेट करना मुझे वहां एक छोटी सी समस्या है। जब मैं जेएसएफ में डेटाटेबल को पॉप्युलेट करना चाहता हूं तो मुझे पहले एक मॉडल बनाना होगा, फिर इसे मेरे दृश्य में उपयोग करें। प्राइमफेस नमूना here पर पसंद है।JSF2.0

और अब, मुझे डेटाटेबल बनाना है जो वेबसाईट से डेटा प्रदर्शित करेगा। मुझे नहीं पता कि कितने कॉलम होंगे, और मुझे उनके नाम नहीं पता ... क्या आप कुछ बुद्धिमान समाधान की सिफारिश कर सकते हैं?

पीएस। मुझे यह भी नहीं पता कि webservice से डेटा कैसे वापस किया जाए - यह अभी भी निर्धारित करना है।


संपादित

public Bean() { 
    columns = new ArrayList<String>(); 
    rows = new ArrayList<Map<String, Object>>();   
    populateColumns(columns,4); 

    for(int i = 0 ; i < 6 ; i++) 
    {    
     Map<String,Object> m = new HashMap<String,Object>(); 
     m.clear();   
     for(int j = 0 ; j < 4 ; j++) 
     { 
      m.put("Column" + j, "sth" + j + i); 
     }            
     rows.add(m); 
    }  
} 

private void populateColumns(List<String> list, int size) { 
    for(int i = 0 ; i < size ; i++) 
     list.add("Column" + i); 
} 

उत्तर

7

एक List<Map<String, Object>> जो rows संपत्ति का प्रतिनिधित्व करता है में डेटा एकत्र करें। Map कॉलम नाम से कुंजीपटल कॉलम का प्रतिनिधित्व करता है (यदि आवश्यक हो, तो column1, column2, column3, आदि "column" + i द्वारा स्वचालित रूप से स्वत: उत्पन्न किया गया है)। उन कॉलम नामों को एक अलग List<String> में एकत्र करें जो columns संपत्ति का प्रतिनिधित्व करता है। आखिरकार इसे <p:columns>:

<p:dataTable value="#{bean.rows}" var="row"> 
    <p:columns value="#{bean.columns}" var="column"> 
     #{row[column]} 
    </p:columns> 
</p:dataTable> 
+0

शानदार .. धन्यवाद, लेकिन कॉलम हेडर कैसे प्राप्त करें? यहां प्रश्न के संपादन में मेरा बीन है। केवल हेडर गायब हैं। – Marshall

+2

' 'का उपयोग करें। या यदि आपके पास अलग-अलग 'मानचित्र <स्ट्रिंग, स्ट्रिंग>' में हेडर नाम हैं, तो कुछ ' ' – BalusC

+0

जैसे कुछ धन्यवाद। पहला विकल्प ठीक काम करता है। लेकिन दूसरा ... मैं इस तरह के हेडर घोषित करता हूं: सूची <मानचित्र <स्ट्रिंग, स्ट्रिंग >> हेडर; गेटटर और सेटर को सार्वजनिक के साथ बनाएं, लेकिन headerText = "# {browserBean.headers [कॉलम]}" काम नहीं करता है:/ – Marshall