我的模板中有这个函数来显示树并使用 freemarker 2.0 :
function doBeforeToggle() {}
var ar1=new Array();
var CurrentTree = null;
var label = null;
<assign First = "true">
<foreach Node in PUBLISH._children._descendantOrSelf>
<if First = "true" >
var tree=new WebFXTree("${Node.@Label._text}");
ar1["${Node.@NodeID._text}"] = tree;
<assign First = "false">
<else>
var NewTree = new WebFXTreeItem("${Node.@Label._text}");
<if Node.@File>
NewTree.action = "${Node.@File._text}"
<else>
NewTree.icon = webFXTreeConfig.folderIcon;
</if>
ar1["${Node.@NodeID._text}"] = NewTree;
CurrentTree=ar1["${Node._parent.@NodeID._text}"];
CurrentTree.add(NewTree);
</if>
</foreach>
document.write(tree);
它工作正常,直到我升级到 freemarker 2.3.19。 现在它抛出这个错误:
java.lang.NoSuchMethodError: org.jdom.Element.getParent()Lorg/jdom/Element;
at freemarker.ext.jdom.NodeListModel.getParent(NodeListModel.java:847)
at freemarker.ext.jdom.NodeListModel.access$1100(NodeListModel.java:122)
at freemarker.ext.jdom.NodeListModel$ParentOp.operate(NodeListModel.java:868)
at freemarker.ext.jdom.NodeListModel.evaluateElementOperation(NodeListModel.java:1035)
at freemarker.ext.jdom.NodeListModel.get(NodeListModel.java:473)
at freemarker.core.Dot._getAsTemplateModel(Dot.java:76)
at freemarker.core.Expression.getAsTemplateModel(Expression.java:89)
at freemarker.core.Dot._getAsTemplateModel(Dot.java:74)
at freemarker.core.Expression.getAsTemplateModel(Expression.java:89)
at freemarker.core.Dot._getAsTemplateModel(Dot.java:74)
at freemarker.core.Expression.getAsTemplateModel(Expression.java:89)
at freemarker.core.Expression.getStringValue(Expression.java:93)
at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
at freemarker.core.Environment.visit(Environment.java:221)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:221)
at freemarker.core.IfBlock.accept(IfBlock.java:82)
at freemarker.core.Environment.visit(Environment.java:221)
at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:167)
at freemarker.core.Environment.visit(Environment.java:428)
at freemarker.core.IteratorBlock.accept(IteratorBlock.java:102)
at freemarker.core.Environment.visit(Environment.java:221)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:221)
at freemarker.core.Environment.process(Environment.java:199)
at freemarker.template.Template.process(Template.java:259)
如果我删除以下代码行:
CurrentTree=ar1["${Node._parent.@NodeID._text}"];
我不再有这个错误,但树没有很好地显示。
经过一番研究,我发现他们有一个补丁,通过用 getParentElement 替换 getParent 来修复 NodeListModel.java。当我通过添加固定的 NodeListModel.java 来重写此类时,一切正常。
但我想知道他们是否是另一种不添加此补丁的解决方案,也许我需要更改 xml 格式或用其他内容替换 Node._parent。
预先感谢您的帮助。
卡琳
最佳答案
早在 2004 年,当 JDOM 处于“测试版”时,getParent()
签名已更改,getParentElement()
was added.免费标记is compiled使用 JDOM beta 0.8(来自 2002 - 11 years ago)。
我建议您联系 Freemarker 团队并建议更新以支持 JDOM 1.1.3 和 2.0.5
关于java - Freemarker 2.3.19使用jdom getParent时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19356217/