Java 超高速发动机输出

Java 超高速发动机输出,java,velocity,Java,Velocity,我有各种表示电子邮件的Velocity模板文件。我正在寻找一种优雅的方式,允许模板文件为消息和内容输出主题行。我考虑过几个选择: 使输出的第一行类似于“Subject:Bla”,并在Java中去掉它。我拒绝了这种方法,因为从Java执行奇特的字符串操作正是我试图首先使用Velocity来解决的问题 在Velocity宏中的某些代码的映射中抛出一个可设置对象,以调用setter。优点:很简单。缺点:我不喜欢从速度设置外部对象的想法,即使只是作为输出的一种形式。不过,这可能是一种无理的厌恶 创建一些

我有各种表示电子邮件的Velocity模板文件。我正在寻找一种优雅的方式,允许模板文件为消息和内容输出主题行。我考虑过几个选择:

  • 使输出的第一行类似于“Subject:Bla”,并在Java中去掉它。我拒绝了这种方法,因为从Java执行奇特的字符串操作正是我试图首先使用Velocity来解决的问题

  • 在Velocity宏中的某些代码的映射中抛出一个可设置对象,以调用setter。优点:很简单。缺点:我不喜欢从速度设置外部对象的想法,即使只是作为输出的一种形式。不过,这可能是一种无理的厌恶

  • 创建一些自定义速度命令,如#setSubjectLine。优点:更优雅。缺点:将作为有效命令应用于我的所有模板,无论它们是否是电子邮件

  • 为主题行和电子邮件的其余部分提供单独的模板文件。赞成者:根本没有什么特别的把戏!缺点:并非所有的电子邮件逻辑都存在于同一个地方

  • 一些很酷的速度技巧我不知道


  • 那我该怎么办?你对5号还是6号有什么建议?我应该选择1、2、3或4的原因?

    $work
    我们做4。 它运行良好,反对并非所有电子邮件逻辑都生活在同一个地方的论点似乎有点过于严格。您只需要两个相邻的velocity文件。即使只有一个模板文件,您仍然可以使用逻辑来填充数据、确定收件人、附加附件等等,而这也不存在于Velocity文件中


    我更喜欢2而不是3,只是因为我不喜欢速度宏。使用Java对象似乎更灵活

    $mailContext.setSubjectLine($subject)
    
    使用2或3,您可以更接近将所有内容放在一个位置的目标:例如,您可以让Velocity设置收件人列表。另一方面,这似乎与Velocity是纯模板技术的想法相冲突

    这里要考虑的是谁在写速度模板。它离“最终用户”越近,你就越不想为那些与创建电子邮件内容没有直接关系的事情麻烦他们(并阻止他们乱搞)


    不确定这是否可行,是否有意义,甚至在Java Mail API中是否可行,但只是为了完整性:

     6.让velocity创建整个电子邮件,包括标题,而不仅仅是内容和主题。与1的区别在于,您不需要对该输出进行后期处理,它可以直接转到邮件传输代理。可能不适用于附件

    To: $to
    CC: $cc
    Subject: $subject
    
    Here comes the content.
    
    2) 在Velocity宏中的某些代码的映射中抛出一个可设置对象,以调用setter。优点:很简单。缺点:我不喜欢从速度设置外部对象的想法,即使只是作为输出的一种形式。不过,这可能是一种无理的厌恶

    这是我的做法,尽管我自己起初也有类似的疑虑,但我对此感到高兴。我甚至用这种方式设置字符编码和其他属性。这会将模板的其余部分保留为消息正文。我再次感到高兴

    #set ( $myAtts.encoding = "utf-8" )
    #set ( $myAtts.from = "stu@nowhere.net" )
    

    我喜欢这样,将电子邮件的所有内容都放在一个地方。