2012-04-12 17 views
6

मैं कोड निम्नलिखित है:Struts iterator के भीतर ValueStack ऑब्जेक्ट्स का उपयोग कैसे करें?

<s:iterator value="reviews"> 

    <img src="<s:property value="#request.restaurant.portalImage.url" />" /> 

    <s:property value="user.firstName" /> 
    <s:property value="user.lastName" /> 
    <s:property value="rating" /> 
    <s:property value="review" /> 

</s:iterator> 

समीक्षा समीक्षा वस्तुओं जो इस प्रकार की रेटिंग और उपयोगकर्ता के नाम के रूप में एक समीक्षा का ब्यौरा शामिल की एक सूची है।

मेरी समस्या यह है कि मैं लूप के भीतर ValueStack पर मौजूद किसी भी ऑब्जेक्ट तक पहुंचने में सक्षम नहीं हूं।

लूप के बाहर <s:property value="#request.restaurant.portalImage.url" /> सही तरीके से काम करता है। लेकिन लूप के भीतर यह शून्य प्रिंट करता है।

AFAIK एक पुनरावर्तक वैल्यूस्टैक पर इसका संग्रह धक्का देता है ताकि सभी ओजीएनएल अभिव्यक्ति इसके खिलाफ हल हो जाएं। लेकिन मैंने # का उपयोग किया है जिसका अर्थ है कि मैं संकल्प के लिए मूल वस्तु को स्पष्ट रूप से निर्दिष्ट कर रहा हूं।

यह अभी भी क्यों काम नहीं कर रहा है?

उत्तर

1

आप नीचे दिए गए है जैसे कि यह बदलना चाहिए:

<s:iterator value="reviews" var="varrequest"> 

    <img src="<s:property value="#varrequest.restaurant.portalImage.url" />" /> 

    <s:property value="#varrequest.user.firstName" /> 
    <s:property value="#varrequest.user.lastName" /> 
    <s:property value="#varrequest.rating" /> 
    <s:property value="#varrequest.review" /> 

</s:iterator> 

अद्वितीय सूचकांक वस्तु लाने के लिए एक इटरेटर संदर्भ चर का उपयोग करना।

+0

varrequest क्या है? –

+0

वह चर है जो आपके लिए पहुंचने के लिए वर्तमान अनुक्रमित ऑब्जेक्ट रखता है। कृपया अधिक जानकारी के लिए इस दस्तावेज़ को देखें। http://struts.apache.org/2.0.11/docs/iterator.html – Phani

+0

वर्तमान अनुक्रमित ऑब्जेक्ट सूची से एक समीक्षा ऑब्जेक्ट होगा। मैं सूची के बाहर कुछ एक्सेस करना चाहता हूं। एक रेस्तरां ऑब्जेक्ट जो अनुरोध दायरे में संग्रहीत है। –

1

मुझे यकीन नहीं है कि आप जिस संग्रह में इटरेटर में उपयोग कर रहे हैं उस संग्रह में कौन सा ऑब्जेक्ट निहित है। एस 2 इटेटर टैग का उपयोग करके संग्रह को पुन: सक्रिय करते समय पुनरावर्तक के अनुसार यह ऑब्जेक्ट को स्टैक स्टैक के शीर्ष पर धक्का देगा, जिसका अर्थ है , आप उपयोगकर्ता वस्तु का संग्रह है का कहना है कि जिस पर आप की तरह

<s:iterator value="userCollection"> 

</s:iterator> 

पुनरावृत्ति कर रहे हैं ताकि जब इस पुनरावृति जाएगा, एस 2 इटरेटर मूल्य ढेर के शीर्ष पर user वस्तु चली जाएगी और अगर हम के name संपत्ति का उल्लेख करना चाहते हैं user ऑब्जेक्ट, हमें नाम संपत्ति

नाम देने की आवश्यकता है

के बाद से OGNL मूल्य स्टैक में userName को हल करने की कोशिश करेंगे और हम पहले से ही मूल्य stack.I में शीर्ष स्तर वस्तु के रूप में उपयोगकर्ता वस्तु है इटरेटर टैग प्रलेखन के माध्यम से जाने के लिए सुझाव और यह कैसे मान

+0

शीर्ष स्तर वस्तु कोई फर्क नहीं पड़ता। # का उपयोग किसी वस्तु के स्पष्ट रूप से निर्दिष्ट करने के लिए किया जाता है, चाहे वह शीर्ष पर है या नहीं। –

0

मैं इसे अपने समस्या का समाधान लगता है

s:iterator value="reviews" status="position"> 
    <img src="<s:property value="#request.restaurant.portalImage.url"/>"/> 
    <s:property value="#position.user.firstName"/> 
    <s:property value="#position.user.lastName"/> 
    <s:property value="#position.rating"/> 
    <s:property value="#position.review"/> 
</s:iterator> 

आपकी आवश्यकता थोड़ा उलझन में है

2

मैंने अपनी पूरी दोपहर एक समान मुद्दे के खिलाफ लड़ने में बिताया। मेरे मामले में, मुद्दा यह था कि मेरा इटरेटर चर (आपके मामले में reviews) में बाहरी चर के समान नाम वाला फ़ील्ड था।

इससे कोई फर्क नहीं पड़ता कि मैंने इटरेटर के स्थानीय ढेर से तोड़ने की कोशिश की, यह बाहरी चर तक नहीं पहुंच पाएगा।

इटरेटर एक क्षेत्र रेस्टोरेंट इसकी बाहरी रेस्टोरेंट चर ओवरराइड करने के लिए, कोई फर्क नहीं पड़ता कि आप कितना मुश्किल की कोशिश जा रहा बुलाया है, तो अपने समीक्षा :(

समाधान मैंने पाया बस बाहरी नाम बदलने के लिए था चर (जैसे: theRestaurant)।।

एक बार मैं रखा, यह अब भीतरी चर के साथ टकरा गया था, और मैं iterator के भीतर से इसे उपयोग करने में सक्षम था

+1

धन्यवाद, इससे बहुत मदद मिली! एक और समाधान स्थानीय चर में "बाहरी मूल्य" को स्टोर करने के लिए है, इसे टैग का उपयोग करके, और इसके बजाय इस स्थानीय चर को प्रतिबिंबित करना ( या $ {theestest}}। – mmuller

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