2011-05-14 12 views
9

मेरे पास बीन "माईबीन" है, जिसमें संपत्ति हैश मैप - "मैप" है जो मान प्रकार MyClass है। मैं यूईई का उपयोग कर जेएसएफ में मानचित्र के कुछ गुण दिखाना चाहता हूं: दोहराना। लेकिन इन कोड:जेएसएफ में हैशपैप मान कैसे दिखाएं?

<ui:repeat var="var" value="#{mybean.map}" > 
<tr> 
<td> <h:outputText value="#{var.value.property1}"></h:outputText> </td> 
<td><h:outputText value="#{var.value.property2}"></h:outputText></td> 
</tr> 
</ui:repeat> 

लेकिन इस कोड कुछ भी दिखाई नहीं दिया। हालांकि जब मैं इस तरह jsp में हैशपैप मान दिखाने की कोशिश करता हूं, तो यह सफल था। मैं कहाँ गलत हूँ? और यह कैसे ठीक है?

+0

(@Aram: यदि आप सामान्य पाठ और कोड ब्लॉकों के बीच एक खाली पंक्ति लगाने की जरूरत है अन्यथा वह ठीक से स्वरूपित नहीं है) – Mat

+0

@Mat: ठीक है, धन्यवाद। मुझे इसके बारे में पता नहीं था। –

उत्तर

5
repeat मूल्य विशेषता के लिए documentation से

:

आइटम है कि इस टैग दोहराता से अधिक का एक संग्रह का नाम है। संग्रह List, सरणी, java.sql.ResultSet, या एक व्यक्तिगत जावा Object हो सकता है। अगर संग्रह शून्य है, तो यह टैग कुछ भी नहीं करता है।

तो, वर अपने HashMap रूप में सेट है और ईएल उस पर कुंजी "value" को देखने के लिए कोशिश करता है। आपको अपने एंट्री सेट को List के रूप में बेनकाब करने की आवश्यकता होगी।

+0

तो मानचित्र का उपयोग करने का कोई तरीका नहीं है? –

+0

@Aram Gevorgyan - जैसे 'डेटाटेबल', 'repeat' एक इंडेक्स-आधारित घटक है (_offset_ और _size_ विशेषताएँ देखें)। एडम Winer (जो JSF विशेषज्ञ समूह में था) यहाँ एक ऐसी ही मामले पर चर्चा करता है: [UIData साथ सेट का उपयोग कर] (http://sfjsf.blogspot.com/2006/03/usings-sets-with-uidata.html)। – McDowell

25

वास्तव में एक प्रमुख pita है यही कारण है कि। <c:forEach> लंबे समय तक Map समर्थित है। मैकडॉवेल द्वारा सुझाए गए एक और गेटर की आपूर्ति के अलावा, आप इसे custom EL function द्वारा भी काम कर सकते हैं।

<ui:repeat value="#{util:toList(bean.map)}" var="entry"> 
    #{entry.key} = #{entry.value} <br/> 
</ui:repeat> 

जहां इस

public static List<Map.Entry<?, ?>> toList(Map<?, ?> map) { 
    return = map != null ? new ArrayList<Map.Entry<?,?>>(map.entrySet()) : null; 
} 

या, यदि आप ईएल 2.2 पहले से ही कर रहे हैं (सर्वलेट द्वारा प्रदान की तरह ईएल समारोह नज़र ऐसे Glassfish 3, बिलाव 7, आदि के रूप में 3.0 संगत कंटेनर), तो बस Map#entrySet() और फिर Set#toArray() का उपयोग करें।

<ui:repeat value="#{bean.map.entrySet().toArray()}" var="entry"> 
    #{entry.key} = #{entry.value} <br/> 
</ui:repeat> 
+0

धन्यवाद, लेकिन मुझे लगता है कि मैं इसे सूची के साथ कर सकता हूं। –

+0

हाय BalusC, अपने वाक्य रचना '# {util: toList (bean.map)}', 'एक प्रबंधित सेम, BalusC util' है? मैं पहले इस वाक्यविन्यास को कभी नहीं देखता हूं। –

+0

@Thang: यह एक ईएल समारोह है: http://stackoverflow.com/questions/7079978/how-to-create-a-custom-el-function/7080174#7080174 यह JSTL कार्यों के रूप में की तरह है। [OmniFaces] (http://wiki.omnifaces.googlecode.com/hg/vdldoc/index.html) में कुछ नामस्थान में भी कुछ है, देखें: mapToList() '। – BalusC

संबंधित मुद्दे