【发布时间】:2012-01-05 13:22:24
【问题描述】:
我想访问 Struts Web 应用程序的 Session、Application 和 Request 变量。 它告诉我 Session 的类型是“HttpSessionHashModel”,查找 API 我看到这个类有一个方法“isEmpty()”。所以我尝试了例如
<#assign a = Session.isEmpty()>
但它告诉我没有“Session.isEmpty”这样的元素。
有人知道为什么它不起作用吗?
在 Session 中有几个类我可以通过
<#assign b = Session["classname"]>(它告诉我 b 是 freemarker.ext.beans.StringModel 类型),但我既不能调用类 StringModel 的方法,也不能访问存储在“类名”中的对象和方法。
希望有人能帮忙
【问题讨论】:
-
什么版本的 Struts?请提供更多细节;你是如何集成 Struts/FreeMarker 等的。
-
您好,感谢您的回答!问题几乎解决了,至少在变量 b 的情况下,我尝试访问“类名”的 Java 代码中不存在的方法。但我仍然会感兴趣,例如为什么 不起作用......你有什么想法吗?因为通常当我有一个 java 类并将它的实例放在数据模型中时,可以在模板中调用此类的方法和变量。我使用 struts1 并通过在 web.xml 中放置一个 servlet 'freemarker' 来集成 Freemarker。 xml 并将 *.ftl 文件映射到此 servlet。
-
不确定;
Session.empty有效吗? -
你必须找出
Session的实际类是什么。这里有两个类:原始的 Java 类和 FreeMarker 的包装类。我知道一些肮脏的技巧...${Session}可能 打印toString()的结果,然后用于包含原始Java 类名。${Session?root}可能会让 FreeMarker 生气,它会将包装类名称打印到错误消息中。哦,更好的是,你试过了吗:<#list Session?keys as k>${k},</#list> -
感谢您的回答(抱歉回复延迟..)。我已经尝试过你的建议,所以看起来 Session 是 HttpSessionHashModel 类型的,但我无法以某种方式访问这个类的方法。
标签: session servlets struts freemarker