Session Freemarker Servlet和Struts:访问模板中的java方法和变量

Session Freemarker Servlet和Struts:访问模板中的java方法和变量,session,servlets,struts,freemarker,Session,Servlets,Struts,Freemarker,我想访问Struts web应用程序的会话、应用程序和请求变量。 它告诉我会话的类型是“HttpSessionHashModel”,在查找API时,我看到这个类有一个方法“isEmpty()”。所以我试着举个例子 <#assign a = Session.isEmpty()> 但它告诉我没有这样的元素“Session.isEmpty” 有人知道为什么它不起作用吗 在会话中,我可以通过访问几个类 (它告诉我b的类型是freemarker.ext.beans.StringModel

我想访问Struts web应用程序的会话、应用程序和请求变量。 它告诉我会话的类型是“HttpSessionHashModel”,在查找API时,我看到这个类有一个方法“isEmpty()”。所以我试着举个例子

<#assign a = Session.isEmpty()>

但它告诉我没有这样的元素“Session.isEmpty”

有人知道为什么它不起作用吗

在会话中,我可以通过访问几个类
(它告诉我
b
的类型是
freemarker.ext.beans.StringModel
),但我既不能调用类
StringModel
的方法,也不能访问“classname”中存储的对象和方法


希望有人能帮助您使用
@s
宏:

与Struts一起分发的标记会自动提供给FreeMarker模板。要使用任何标记,请在标记名称前添加“@s.”。比如:


参考资料


什么版本的Struts?请提供更多细节;您如何集成Struts/FreeMarker等。您好,谢谢您的回答!问题几乎解决了,至少在变量b的情况下,我尝试访问“classname”的Java代码中不存在的方法。但我仍然很感兴趣,为什么举例不起作用。。。你有什么想法吗?因为通常情况下,当我有一个java类并将其实例放入数据模型中时,可以在模板中调用该类的方法和变量。我使用struts1并通过在web.xml中放入servlet“Freemarker”并将*.ftl文件映射到此servlet来集成Freemarker。不确定;
Session.empty
有效吗?您必须找出
Session
的实际类别。这里有两个类:原始Java类和FreeMarker的包装器类。我知道一些肮脏的把戏
${Session}
可能会打印
toString()
的结果,该结果随后用于包含原始Java类名<代码>${Session?root}可能会使FreeMarker生气,并将包装器类名打印到错误消息中。哦,更妙的是,你试过了:
${k},
谢谢你的回答(很抱歉延迟回复..)。我已经尝试了您的建议,所以Session的类型似乎是HttpSessionHashModel,但我无法以某种方式访问此类的方法。
<@s.if test="printName">
  <@s.property value="myBeanProperty" />
</@s.if>