【问题标题】:Variable undefined when referenced in freemarker string but exists otherwise在 freemarker 字符串中引用时变量未定义但否则存在
【发布时间】:2013-01-13 19:38:51
【问题描述】:

我对 Freemarker/Struts2/Spring/Hibernate 等还是很陌生,但我正在做一个旧项目。我修改了一个 FTL 文件以反映一些变化,但我遇到了一个奇怪的问题。

这可行,即检索到正确的值:

<@s.property value="#dataResult.gene.genbankId" />

但是,这不是:

<a href="${geneBankLink}${dataResult.gene.genbankId}" target="_blank">

这两行紧接着出现,即

<a href="${geneBankLink}${dataResult.gene.genbankId}" target="_blank">
<@s.property value="#dataResult.gene.genbankId" /> </a>

产生的错误(简而言之)是:

表达式 dataResult.gene 未定义

freemarker.core.InvalidReferenceException:表达式 dataResult.gene 在 web/search/search_data_result.ftl 的第 54 行第 51 列未定义。

对我来说奇怪的是它确实找到了 dataResult,否则错误将是 dataResult 未定义,而不是 dataResult.gene。

为什么 dataResult.gene 属性可以通过 struts 表示法访问,但不能通过 FreeMarker 表示法访问?

或者,在这种情况下避免使用 FreeMarker 表示法就足够了。

【问题讨论】:

  • #dataResult 与 dataResult 不同
  • 是的,但是把#放在那里是一个语法错误... :s

标签: spring hibernate struts2 freemarker


【解决方案1】:

你试过了吗:

<a href="${geneBankLink + #dataResult.gene.genbankId}" target="_blank">

${} - 表示表达式,其中的所有内容或多或少都被视为 Java 代码(OGNL 负责处理),还有# 定义了一些不同的行为如何解析值 - 在整个 ActionContext 中搜索以找到价值

http://struts.apache.org/2.x/docs/access-to-valuestack-from-jsps.html http://struts.apache.org/2.x/docs/ognl.html

【讨论】:

  • 奇怪的是,任何使用大括号内的哈希似乎都会导致解析错误。
  • hmmm...您是否尝试删除哈希?
【解决方案2】:

好吧,经过几个小时的反复试验,您甚至可以在另一个标签中使用 struts 语法!

所以这确实有效:

<a href="${geneBankLink}<@s.property value="#dataResult.gene.genbankId" />" target="_blank">
<@s.property value="#dataResult.gene.genbankId" /> </a>

去图吧。我仍然有兴趣找出它为什么起作用/为什么它首先会崩溃,但这足以让我继续……

【讨论】:

  • 你为什么不能呢?嵌套在 JSP 标记内是不合法的,但 HTML 标记不被 JSP(或 FreeMarker)处理,它们只是模板的一部分。
  • 酷。我想这对我来说看起来很有趣:) 正如你所说,它不是一个普通的 XML 文件。
猜你喜欢
  • 2016-08-25
  • 1970-01-01
  • 2019-12-29
  • 2011-11-14
  • 1970-01-01
  • 2012-07-25
  • 1970-01-01
  • 2020-11-04
  • 1970-01-01
相关资源
最近更新 更多