在freemarker字符串中引用时变量未定义,否则存在

时间:2013-01-30 03:50:55

标签: spring hibernate struts2 freemarker

我对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。

有没有理由可以通过struts表示法访问dataResult.gene属性,而不是通过FreeMarker表示法?

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

2 个答案:

答案 0 :(得分:0)

嗯,经过几个小时的试验和错误后证明你甚至可以在另一个标签内使用struts语法!

所以这实际上有效:

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

去图。我仍然有兴趣找到它为什么起作用/为什么它首先破坏了,但这足以让我继续......

答案 1 :(得分: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