2013-08-14 7 views
6

Velocity User's Guide में यह टेम्पलेट्स में विधियों का उपयोग करने के लिए बहुत सीधे आगे लगता है। मैंने कोशिश की, लेकिन यह काम नहीं कर सका। क्या कोई मुझे बता सकता है कि मैंने क्या गलत किया?वेग टेम्पलेट्स विधियों को प्रतिस्थापित नहीं कर रहे हैं

धन्यवाद।

यह मेरा कोड

@Test 
public void testVelocity() { 
    Velocity.init(); 
    VelocityContext map = new VelocityContext(); 
    map.put("test", "Success"); 
    map.put("ok", "OK!"); 
    map.put("func", new Object() {public String test() {return "Yay!";}}); 
    map.put("func2", new Object() {public String test(String t) {return t+t;}}); 

    String template = "${func.test()} $test $func2.test($ok)"; 
    StringWriter writer = new StringWriter(); 
    Velocity.evaluate(map, writer, "", new StringReader(template)); 
    assertEquals("Yay! Success OK!OK!", writer.toString()); 
} 

है और इस उत्पादन है:

org.junit.ComparisonFailure: 
Expected :Yay! Success OK!OK! 
Actual :${func.test()} Success $func2.test($ok) 

चर प्रतिस्थापन ठीक से काम करने लगता है, लेकिन नहीं विधि कॉल।

कृपया मदद करें।

उत्तर

5

समस्या यह है कि सुरक्षा कारणों से वेग के लिए ही बुला की अनुमति देता है सार्वजनिक तरीकों सार्वजनिक कक्षाएं की है। एक अज्ञात वर्ग सार्वजनिक नहीं है, इस प्रकार कॉल अवरुद्ध है।

यदि आप एक असली वस्तु, सार्वजनिक वर्ग का एक उदाहरण डालते हैं तो यह काम करेगा।

यदि आप सुरक्षित यूबर्सप्टर को अक्षम करते हैं तो यह भी काम करेगा, लेकिन यह एक अच्छा विचार नहीं है, क्योंकि यह सिस्टम खोलता है।

+0

धन्यवाद! इससे मदद मिली! मैं एक पीओसी कर रहा था इसलिए मुझे 'असली' वर्ग बनाने से परेशान नहीं था ... – Bennie

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