1

我正在构建一个利用 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 正确响应调用之前,需要向请求中注入其他内容,但我不确定这是什么。

任何人都知道如何让这个工作?其他taglib像 JSTL-core 这样的工作正常。

4

1 回答 1

0

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

于 2014-05-12T18:52:33.307 回答