2012-01-02 8 views
12

Bir Spring Web Uygulamasında Velocity aracılığıyla şablonlardan e-postalar oluşturuyorum. Şimdi HTML değerlerine ihtiyacım var. Velocity Escape Tool'u buldum. Ama yapılandırmayı çalışmadım.Hız Kaçış Aracının Yay Özellikleri ile nasıl yapılandırılır?

<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean"> 
    <property name="resourceLoaderPath" value="classpath:/velocity/emailTemplates" /> 
    <property name="preferFileSystemAccess" value="false" /> 
    <property name="overrideLogging" value="true" /> 
    <property name="velocityProperties"> 
     <util:properties> 
      <prop key="input.encoding">UTF-8</prop> 
      <prop key="output.encoding">UTF-8</prop> 
      <prop key="tools.toolbox">application</prop> 
      <prop key="tools.application.esc">org.apache.velocity.tools.generic.EscapeTool</prop> 
     </util:properties> 
    </property> 
</bean> 

Şablon (htmlEscapeTest.vm):

with escape: $esc.html($needEscape) 

TestCase:

@Test 
public void testHtmlEscapingSupport() { 

    final String needEscape = "<test>"; 

    ModelMap model = new ModelMap(); 
    model.addAttribute("needEscape", needEscape); 
    String result = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, HTML_ESCAPING_TEMPLATE_FILE, model); 
    assertThat(result, StringContains.containsString("&lt;test&gt;")); 
} 

Ama uğraş vermişler ne

yüzden ücret (ilkbahar applicationContext.xml) 'dir Test başarısız oldu, ...got: "with escape: $esc.html($needEscape)"

Neyi yanlış yaptığımı bilen var mı?


ben testinde new EscapeTool() ettiği açık eklerseniz:

VelocityContext velocityContext = new VelocityContext(model); 
velocityContext.put("esc", new EscapeTool()); 
StringWriter writer = new StringWriter(); 
velocityEngine.mergeTemplate(HTML_ESCAPING_TEMPLATE_FILE, velocityContext, writer); 
String result = writer.toString(); 

o zaman çalışıyor. Ancak, belgeleri anladığım kadarıyla, araçlar özellik dosyasında bir kez yapılandırılmalıdır.

Velocity Engine 1.7 ve Velocity Tools 2.0 kullanıyorum.

+1

o size hız çağırmak istediğinizde direkt olarak, içeriği manuel olarak ayarlamanız gerekir. Söz konusu belgelere bir bağlantı sağlar mısınız? – jtoberon

+0

@jtoberon: http://velocity.apache.org/tools/devel/config.properties.html ve http://velocity.apache.org/tools/devel/config.html – Ralph

+0

Hangi hızda kullanıyorsunuz? Orijinal Kaçış Araçları bağlantınız 1.4 oldu ve bu bağlantılar 2.0'dır. – jtoberon

cevap

3

Uyarı: Bunu bir süre önce biraz belirsiz anılara dayanarak yapıyorum. Kilometre değişebilir.

Hız belgelerinin bir kısmı "Bunu bir VelocityView içinde nasıl kullanırım?" Bakış açısıyla okunmalıdır. Aynı özellikleri doğrudan java kodundan kullanmak isterseniz, birkaç ayrıntıyı değiştirmeniz gerekir. Bu durumda, Context'u düzgün oluşturmadığınızı düşünüyorum. Eğer "sizin için bir bağlam oluşturmak için [ToolManager] sor" emin olarak the standalone example here takip etmeye deneyin: VelocityView kullanıyorsanız muhtemelen sizin için örtülerin altında yapılır benzer

ToolManager manager = ... 
Context context = manager.createContext(); 

şey.

+0

Teşekkürler, deneyeceğim. – Ralph

+0

@jtoberon Benzer konularda çalışıyorum. Anladığım kadarıyla, 'VelocityEngineFactoryBean' bunun bir kısmını ele alıyordu, ama ne kadar iyi olduğum açık değil. – Dan

+0

Hmm, özellikle Spring için mantıklı ve Spring'i kullandığını söyledi. Ve yine de örneği işe yaramıyor. Bunu anlamak, 'VelocityEngineUtils' çalıştığı zaman içeriğin tam olarak ne olduğunu kontrol etmek için bir hata ayıklayıcıda başarısız teste adım atmayı gerektirebilir. – jtoberon

1

İşte yeni çalıştığım bazı kodlar. Standart araçların ToolManager tarafından otomatik olarak kurulduğunu buldum.

@Autowired 
private VelocityEngine velocityEngine; 

public void createHtml(String templateLocation, Map<String, Object> model) throws Exception { 
    ToolManager toolManager = new ToolManager(); 
    ToolContext toolContext = toolManager.createContext(); 
    VelocityContext velocityContext = new VelocityContext(model, toolContext); 
    StringWriter resultWriter = new StringWriter(); 
    velocityEngine.mergeTemplate(templateLocation, "UTF-8", velocityContext, resultWriter); 
    String html = resultWriter.toString(); 
    // use the HTML here 
} 

Ve şablon bu

<p>Dear $esc.html($customer.firstname)</p> 
5

Sen VelocityEngine doğrudan Araçlar yapılandıramazsınız vardır.

ModelMap model = new ModelMap(); 
model.put("esc", new EscapeTool()); 
VelocityEngineUtils.mergeTemplateIntoString(
       velocityEngine, "template.vm", "UTF-8", model) 

Eğer VelocityEngine kullanıyorsanız Veya doğrudan yapabileceği: Ne yerine bunu size modeli harita içinde herhangi Araçlar geçmesi VelocityEngineUtils kullandığımızda

VelocityContext velocityContext = new VelocityContext(model); 
velocityEngine.mergeTemplate(templateLocation, encoding, velocityContext, writer); 
0
  1. Add hız aracı pom içinde maven bağımlılığı veya sınıf yolunda kavanoz ekle.
  2. Hız bağlamında kaçış aracı nesnesini ekleyin.

    [context.put ("escapeTool", yeni EscapeTool())] şablonda

  3. kullanımı escapeTool

  4. .

    [$ escapeTool.xml (value_to_be_escaped)] Bu

0

değişimi:

<property name="velocityProperties"> 
    <util:properties> 
     <prop key="input.encoding">UTF-8</prop> 
     <prop key="output.encoding">UTF-8</prop> 
     <prop key="tools.toolbox">application</prop> 
     <prop key="tools.application.esc">org.apache.velocity.tools.generic.EscapeTool</prop> 
    </util:properties> 
</property> 

için: benim deneyim oldu Genellikle

<property name="velocityProperties"> 
      <value> 
       input.encoding=UTF-8 
       output.encoding=UTF-8 
       tools.toolbox=application 
       tools.application.esc=org.apache.velocity.tools.generic.EscapeTool 
      </value> 
     </property> 
İlgili konular