【问题标题】:Implementing mail templates using Struts 2 taglib in custom JSP template在自定义 JSP 模板中使用 Struts 2 taglib 实现邮件模板
【发布时间】:2014-06-30 04:38:57
【问题描述】:

我正在构建一个利用 Struts 2 作为主要框架的应用程序,但其中一个要求是应用程序发送自动电子邮件。

由于 Struts 2 在实现邮件模板方面没有提供太多开箱即用的帮助,我决定只使用普通的 JSP,如下所示:

public static String parseJSPTemplate(String jspPath, HttpServletRequest req) throws ServletException, IOException {
    RequestDispatcher jsp = req.getRequestDispatcher(jspPath);
    EmailTemplateHandler tpl = new EmailTemplateHandler();
    jsp.forward(req, tpl);
    return tpl.toString();
}

因此,这会以正常方式处理 JSP,并返回一个字符串表示形式的输出,其中替换了变量等。

人们会认为通常包含 Struts 2 标签库(例如<%@ taglib prefix="s" uri="/struts-tags" %>)将允许使用像<s:url /> 这样的标签;但是,情况似乎并非如此。相反,对taglib 的调用结果为空白。不显示错误,也不抛出异常。

我的猜测是,在 Struts 2 正确响应调用之前,需要向请求中注入其他内容,但我不确定这是什么。

有人知道如何让它工作吗?其他taglibs 像 JSTL-core 工作正常。

【问题讨论】:

  • 您是如何调用 taglib 来产生结果的?您的期望是什么?
  • 我如上所述加载了 taglib 并这样称呼它:<s: url action="index" namespace="/my/namespace" />。我的期望是它会返回一个指向该操作的 URL,包括上下文根。相反,它什么也不产生(空白)。
  • 糟糕。就我个人而言,我只会使用 FreeMarker/etc 之类的东西来进行电子邮件模板。 JSP 很冗长,是一个可以使用的 PITA。

标签: java email jsp struts2 struts-tags


【解决方案1】:

如果ActionContext 可用,Struts 标记就可以工作。通常它是由 Dispatcher 在准备操作中创建的。因此,应该将 struts2 过滤器映射为接受 DispatcherType.FORWARD 请求,以便在您的转发中调用。也可以在JSP中通过ActionContext.getContext()获取动作上下文进行调试。

【讨论】:

  • 您能否详细说明如何确保 ActionContext 可用和/或如何确保在 DispatcherType.FORWARD 操作期间包含它?
  • 如果上下文是null,那么它不可用。为确保它,您应该在此类操作上映射一个过滤器。将<dispatcher>FORWARD</dispatcher> 添加到您的过滤器映射中。调试 JSP 以确保操作上下文可用。
猜你喜欢
  • 2012-11-13
  • 2020-08-31
  • 1970-01-01
  • 2018-12-05
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-10
相关资源
最近更新 更多