2013-10-14 50 views
0

當我有這個功能在我的模板,以顯示在樹上,用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的東西。

非常感謝您的幫助。

卡琳

回答

1

早在2004年,當JDOM是 '測試版',在getParent()簽名被修改和getParentElement() was added. Freemarker的is compiled用JDOM測試版0.8(從2002 - 11 years ago)。

我建議您聯繫Freemarker的特安和建議的更新,以支持JDOM 1.1.3以及2.0.5

+0

FreeMarker也可以與其他一些可選的依賴項一起使用,例如它支持多個Python版本。 OTOH我想知道還有多少人仍然在使用JDOM支持。它意味着要被移除很長一段時間,但它不能按照版本策略pror FM 2.4.0。此外,OP從2002年的FreeMarker 2.0升級...這不是玩笑,因爲之前的2004年年中,FreeMarker並沒有因爲向下兼容而受到嚴格的紀律處分... – ddekany

+0

從我的角度來看我的答案* * JDOM維護者。它令我感到擔憂的是,像FreeMaker這樣使用beta版本API的積極維護的項目。 JDOM API在多年前的1.0版本中穩定下來,並且保持所有版本的完全向後兼容性,直到引入泛型的2.0版本。如果他們想,我可以幫助FreeMaker的人充分利用JDOM 1.x和2.x。 – rolfl

+0

雖然FreeMarker是積極開發的,但freemarker.ext包的情況稍微複雜一點......它們是擴展(像附加組件),其中大部分應該放在單獨的可選'jar'中。並不是所有這些都被積極維護......就像JDOM或Rhino包幾乎被放棄一樣。 – ddekany

0

嘗試使用JDOM 0.8測試版......或者,你可以複製freemareker.ext.jdom到另一個包,修補它,然後用它來包裝JDOM對象。 (或者,如果有它足夠的需求,也可能是在FreeMarker的改進,使之支持多JDOM版本。)

BTW,ar1["${[email protected]_text}"]剛好可以寫爲ar1[[email protected]_text],但誤差不會去,因爲那離。

+0

我建議不要使用JDOM 0.8(它在2002年以後發佈的多個JDOM版本中解決了許多問題)。 FreeMarker目前正在積極開發中。如果Freemarker的維護人員被幹擾,我可以幫助他們遷移他們的系統來支持JDOM 1.x和2.x ......這是相當平凡的。 – rolfl

+0

嗯,我想這不是很難......只是'freemarker.ext.jdom'本身已被棄用。這就是爲什麼我要說知道還有多少人仍在使用它。 – ddekany