1

我对 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 符号的方法就足够了。

4

2 回答 2

0

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

所以这实际上有效:

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

去搞清楚。我仍然有兴趣找出它为什么起作用/为什么它首先会破裂,但这足以让我继续……

于 2013-01-30T05:28:15.340 回答
0

你试过了吗:

<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

于 2013-01-30T06:50:00.693 回答