【问题标题】:Extra Velocity engine output超高速发动机输出
【发布时间】:2010-11-08 07:25:36
【问题描述】:

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

  1. 使输出的第一行类似于“主题:Bla”,然后在 Java 中将其删除。我拒绝了这种方法,因为从 Java 执行花哨的字符串操作正是我首先尝试通过使用 Velocity 来解决的问题。

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

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

  4. 为主题行和电子邮件的其余部分设置单独的模板文件。优点:根本没有什么特别的技巧!缺点:并非所有电子邮件逻辑都在同一个地方。

  5. 我不知道的一些很酷的 Velocity 技巧。

  6. ???

那我该怎么办?你有5或6的建议吗?我应该选择 1、2、3 或 4 的原因吗?

【问题讨论】:

    标签: java velocity


    【解决方案1】:

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


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

    $mailContext.setSubjectLine($subject)
    

    使用 2 或 3,您可以更接近将所有东西放在一个地方的目标:例如,您也可以让 Velocity 设置收件人列表。另一方面,这似乎与 Velocity 是一种纯粹的模板技术的想法相冲突。

    这里要考虑的是谁在编写 Velocity 模板。离“最终用户”越近,您就越不想用任何与创建电子邮件内容没有直接关系的事情来麻烦他们(并防止他们搞砸)。


    不确定这对于 Java Mail API 是否可行、有意义或什至可能,但只是为了完整性:

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

    To: $to
    CC: $cc
    Subject: $subject
    
    Here comes the content.
    

    【讨论】:

      【解决方案2】:

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

      这是我的方法,尽管我一开始也有类似的疑虑,但我对此很满意。我什至以这种方式设置字符编码和其他属性。这将模板的其余部分作为消息正文。再次,我很高兴。

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

      【讨论】:

      • 我喜欢这样可以将电子邮件的所有内容保存在一个地方。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-15
      相关资源
      最近更新 更多