【问题标题】:Freemarker Servlet and Struts : access java methods and variables in templateFreemarker Servlet 和 Struts:访问模板中的 java 方法和变量
【发布时间】:2012-01-05 13:22:24
【问题描述】:

我想访问 Struts Web 应用程序的 Session、Application 和 Request 变量。 它告诉我 Session 的类型是“HttpSessionHashModel”,查找 API 我看到这个类有一个方法“isEmpty()”。所以我尝试了例如

<#assign a = Session.isEmpty()>

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

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

在 Session 中有几个类我可以通过 &lt;#assign b = Session["classname"]&gt;(它告诉我 bfreemarker.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 生气,它会将包装类名称打印到错误消息中。哦,更好的是,你试过了吗:&lt;#list Session?keys as k&gt;${k},&lt;/#list&gt;
  • 感谢您的回答(抱歉回复延迟..)。我已经尝试过你的建议,所以看起来 Session 是 HttpSessionHashModel 类型的,但我无法以某种方式访问​​这个类的方法。

标签: session servlets struts freemarker


【解决方案1】:

使用@s 宏:

随 Struts 分发的标签自动可用于 FreeMarker 模板。要使用任何标签,请添加“@s”。在标签名称前面。喜欢:

<@s.if test="printName">
  <@s.property value="myBeanProperty" />
</@s.if>

参考文献

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 2018-09-13
    • 2020-04-03
    • 1970-01-01
    • 2014-07-31
    相关资源
    最近更新 更多