我对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表示法的方法就足够了。
答案 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