當我有這個功能在我的模板,以顯示在樹上,用freemarker的2.0:Freemarker的2.3.19錯誤使用JDOM的getParent
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("${[email protected]_text}");
ar1["${[email protected]_text}"] = tree;
<assign First = "false">
<else>
var NewTree = new WebFXTreeItem("${[email protected]_text}");
<if [email protected]>
NewTree.action = "${[email protected]_text}"
<else>
NewTree.icon = webFXTreeConfig.folderIcon;
</if>
ar1["${[email protected]_text}"] = NewTree;
CurrentTree=ar1["${[email protected]_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["${[email protected]_text}"];
我沒有這個錯誤了,但樹沒有得到很好的顯示 現在拋出這個錯誤。
經過一番研究,我發現它們是一個通過getParentElement代替getParent來修復NodeListModel.java的補丁。當我通過添加固定的NodeListModel.java覆蓋這個類時,一切正常。
但我想知道如果他們是另一個解決方案,而不添加此修補程序,也許我需要更改xml格式或替換Node._parent的東西。
非常感謝您的幫助。
卡琳
FreeMarker也可以與其他一些可選的依賴項一起使用,例如它支持多個Python版本。 OTOH我想知道還有多少人仍然在使用JDOM支持。它意味着要被移除很長一段時間,但它不能按照版本策略pror FM 2.4.0。此外,OP從2002年的FreeMarker 2.0升級...這不是玩笑,因爲之前的2004年年中,FreeMarker並沒有因爲向下兼容而受到嚴格的紀律處分... – ddekany
從我的角度來看我的答案* * JDOM維護者。它令我感到擔憂的是,像FreeMaker這樣使用beta版本API的積極維護的項目。 JDOM API在多年前的1.0版本中穩定下來,並且保持所有版本的完全向後兼容性,直到引入泛型的2.0版本。如果他們想,我可以幫助FreeMaker的人充分利用JDOM 1.x和2.x。 – rolfl
雖然FreeMarker是積極開發的,但freemarker.ext包的情況稍微複雜一點......它們是擴展(像附加組件),其中大部分應該放在單獨的可選'jar'中。並不是所有這些都被積極維護......就像JDOM或Rhino包幾乎被放棄一樣。 – ddekany