2010-10-13 66 views
0

我使用Spring MVC的我的web应用程序,我用我的的applicationContext.xml 文件来配置我的电子邮件,我很注入到我的控制器在我spring-servlet.xml文件。配置动态电子邮件内容与替换字符串()或的replaceAll()

我需要发送的一些电子邮件需要根据客户的需求定制。一旦电子邮件文本被注入控制器并发送,电子邮件中的某些信息(名字,姓氏,电话号码等)将需要填写。

这方面的一个例子显示在下面豆

<bean id="customeMailMessage" class="org.springframework.mail.SimpleMailMessage"> 
    <property name="from" value="[email protected]" /> 
    <property name="to" value="[email protected]" /> 
    <property name="subject" value="Testing Subject" /> 
    <property name="text"> 
     <value> 
     Dear %FIRST_NAME% 

       Blah Blah Blah Blah Blah... 
       We Understand that we can reach you at the following information 

       Phone:%PHONE% 
       Address:%ADDRESS% 
     </value> 
    </property> 
</bean> 

这将是我会定义并注入到我的控制器自定义的电子邮件。然后在我的控制器中的代码将填补基于从客户收集的输入值,所以控制器将有类似于以下

//SimpleMailMessage property is injected into controller 
    private SimpleMailMessage simpleMailMessage; 

    //Getters and Setters for simpleMailMessage; 


    MimeMessage message = mailSender.createMimeMessage(); 

    try{ 
     MimeMessageHelper helper = new MimeMessageHelper(message, true); 
     helper.setFrom(simpleMailMessage.getFrom()); 
     helper.setTo(simpleMailMessage.getTo()); 
     helper.setSubject(simpleMailMessage.getSubject()); 

       String text = simpleMailMessage.getText(); 
       text.replace("%FIRST_NAME%",model.getFirstName()); 
       text.replace("%PHONE%",model.getPhone()); 
       text.replace("%ADDRESS%",model.getAddress()); 
     helper.setText(simpleMailMessage.getText()); 
    } 
     catch (MessagingException e) { 
    throw new MailParseException(e); 
    } 
    mailSender.send(message);**strong text** 

我遇到的问题是代码,当我尝试更换值例如%FIRST_NAME%,%PHONE%%ADDRESS%>,它并不代替它。我不确定这是因为我使用replace()错误,还是因为它是以不同的方式处理它,因为值被注入。我也尝试使用replaceAll(),那也不工作。如果有人有更好的想法如何做到这一点,请让我知道。

谢谢

回答

2

不要忘记,在Java中的字符串是不可改变。即您不能更改它们,而是从旧的创建一个新的(请参阅文档replaceAll()并注意返回值)。

因此,replace()不会更改它所调用的字符串,而是会返回一个新的字符串并进行替换。您可以使用返回值,所以只是连锁这些调用起来:

String newString = oldString.replace(..).replace(...); 

如果您需要做很多这样的模板,你可能有兴趣在Apache Velocity,或Freemarker。他们是目的建立模板引擎,将做许多更多的选择(例如提供循环,格式化,条件等等)

+0

我继续整合Velocity模版库,它的伟大工程 – TheJediCowboy 2010-10-18 03:02:51

1

我建议不要通过构建自己的模板系统来重新发明轮子。使用Apache Velocity或其他库来实现这一点 - 它们提供的功能比任何自制解决方案都多,功能更强大,性能更高。

Spring对速度出色的支持,我已经在很多的Spring MVC应用程序(用于电子邮件模板和网页模板)与零个问题使用Velocity模板。

0

我想在这里介绍节奏模板引擎。这里是一些关于这项工作的要点:

  • 剃刀一样synatx,很干净,友好的Java程序员
  • 编译成Java字节码因此是非常快的。它速度比速度快2到3倍
  • 它涵盖了Velocity提供的所有功能以及更多功能。看到full feature set demonstration托管在谷歌应用程序引擎
  • 的API是其他的Java模板引擎中最简单的(速度,freemarker的...)

样品1中,渲染模板文件和位置参数传递:

String result = Rythm.render("/path/to/my/template.txt", foo, bar, ...); 

样品2,渲染模板文件和名称传递参数:

Map<String, Object> args = new HashMap<String, Object>(); 
args.put("foo", foo); 
args.put("bar", bar); 
... 
String result = Rythm.render("/path/to/my/template.txt", args); 

样品3,使无线个字符串的内容和通过参数的位置:

String result = Rythm.render("@args User user;User name is @user.name", user); 

样品4,渲染字符串内容String Interpolation Mode

String result = Rythm.render("User name is @name", user.name); 

链接: