2013-05-24 15 views
5

में चर का समाधान नहीं होता मैं बहुत ही सरल वेग टेम्पलेट है:वेग foreach पाश

<html> 
    <head> 
     <title>Velocity template</title> 
    </head> 
    <body>  
     #foreach($p in $products) 
      $p.name 
     #end   
    </body> 
</html> 

और कोड को संसाधित करता है कि यह:

VelocityEngine engine = new VelocityEngine(); 
engine.init(); 
Template t = engine.getTemplate("./src/com/irbis/dms/velocity/template.html"); 
VelocityContext ctx = new VelocityContext(); 

Product p1 = new Product("fridge"); 
Product p2 = new Product("sofa"); 
Product p3 = new Product("table"); 
Product p4 = new Product("chair"); 

List<Product> products = new ArrayList<Product>(); 
products.add(p1); 
products.add(p2); 
products.add(p3); 
products.add(p4); 

ctx.put("products", products); 
... 

class Product implements Serializable { 

    private String name; 

    public Product() { 
    } 

    public Product(String name) { 
     super(); 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

लेकिन निष्पादन के बाद मैं निम्नलिखित है:

<html> 
    <head> 
     <title>Velocity template</title> 
    </head> 
    <body>  
        $p.name 
        $p.name 
        $p.name 
        $p.name 
    </body> 
</html> 

अगर मैं संदर्भ स्ट्रिंग, इंटीजर इत्यादि में डालता हूं तो यह ठीक काम करता है कहां है त्रुटि? मैं वेग 1.5 का उपयोग करता हूं।

+2

क्या आपने 'क्लास उत्पाद' को सार्वजनिक के रूप में घोषित किया था? –

+0

बहुत बहुत धन्यवाद! समस्या यह थी कि 'क्लास उत्पाद' को डिफ़ॉल्ट पहुंच के साथ घोषित किया गया था। अब यह ठीक काम करता है। –

+0

मार्को, क्या आप अपना उत्तर पोस्ट कर सकते हैं? इसलिए मैं इसे स्वीकृत –

उत्तर

4

आपको Product कक्षा public के रूप में घोषित करना है या अन्यथा आप इसे अपने टेम्पलेट में उपयोग नहीं कर सकते हैं।

public class Product implements Serializable { 
+1

वेग से बहुत क्रोधित व्यवहार, मैं कहने की हिम्मत करता हूं। –

+0

समस्या Velocity की चुप्पी है। अगर यह ऐसी चीजों के बारे में शिकायत आसान हो तो आसान होगा ... –

0

आपका वैरिएबल दृश्यमान नहीं है क्योंकि यह निजी है, getName() का उपयोग करें और हमें बताएं।

+0

वेग स्वचालित रूप से getName() पर इसका अनुवाद करता है। आमतौर पर ... –

+0

तो कुछ नया सीख लिया! – blondeamon

+0

अब और फिर होता है :) –

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