我有一个行动类,设置了会话属性A
和B
。 我知道这些值存在且它们不是null
。
在Freemarker模板中,我正在尝试使用下面的表达式获取这些值
<#if session.A?exists>
${session.A}
</#if>
或者
<@s.property value="%{#session.A}" />
在下面的错误中,我得到了以下信息:
<#if session.A?exists> Expression session is undefined on line 39
据我所知,使用Freemarker Struts2时,我们不需要做任何额外的设置,因为Freemarker的jar包已经与Struts2捆绑在一起。我认为Freemarker将可以访问值栈,但似乎我在这里有些错误。能否有人看一下并找出我遗漏了什么?我的版本是S2 2.15.3。
以下是额外的代码,在Action类中,我向会话对象添加了值:
sessionMap.put("A", A);
sessionMap.put("B", B);
System.out.println("Inside loop test 2!");
String[] args = null;
SendEmail.main(args);
return "success";
现在sendEmail类包含freemarker配置。
Configuration cfg = new Configuration();
cfg.setClassForTemplateLoading(SendEmail.class, "");
Template template = cfg.getTemplate("SendEmail.ftl");
Map<String,String> rootMap = new HashMap<>();
Writer out = new StringWriter();
try {
template.process(rootMap, out);
} catch (TemplateException | IOException templateException) {
logger.error("Freemarker Template processing exception", templateException);
}
body.setContent(out.toString(), "text/html");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(body);
message.setContent(multipart, "text/html");
Transport.send(message);
Session map被声明为
private Map<String, Object> sessionMap;