2013-03-18 47 views
1

我想在Extend組件中使用片段,但它會引發MarkupNotFoundException。是否可以在Extend組件中使用Wicket Fragments?

該代碼是與此類似:

BasePanel.html

<?xml version="1.0" encoding="UTF-8" ?> 
<wicket:panel xmlns:wicket="http://wicket.apache.org"> 

    <div wicket:id="dialog"> 
     <div class="titlebar"> 
      <h3 wicket:id="dialogTitle">[[ dialog title ]]</h3> 
      <div wicket:id="dialogCloseBtn" class="closeBtn right"></div> 
     </div> 
     <wicket:child /> 
    </div> 

</wicket:panel> 

ChildPanel.html

<?xml version="1.0" encoding="UTF-8" ?> 

<wicket:extend xmlns:wicket="http://wicket.apache.org"> 

    <wicket:panel wicket:id="panel1" /> 

    <wicket:fragment wicket:id="fragment1"> 
    </wicket:fragment> 

</wicket:extend> 

ChildPanel.java

public class ChildPanel extends Panel 
{ 
    public ChildPanel(String id, IModel<?> model) 
    { 
     super(id, model); 
     add(new Fragment("panel1", "fragment1", this); 
    } 
} 

的問題存在於檢票Markup.java類:

public final IMarkupFragment find(final String id) 
{ 
    Args.notEmpty(id, "id"); 

    MarkupStream stream = new MarkupStream(this); 
    stream.setCurrentIndex(0); 
    while (stream.hasMore()) 
    { 
     MarkupElement elem = stream.get(); 
     if (elem instanceof ComponentTag) 
     { 
      ComponentTag tag = stream.getTag(); 
      if (tag.isOpen() || tag.isOpenClose()) 
      { 
       if (tag.getId().equals(id)) 
       { 
        return stream.getMarkupFragment(); 
       } 
       if (tag.isOpen() && !tag.hasNoCloseTag() && !(tag instanceof WicketTag) && 
        !"head".equals(tag.getName()) && !tag.isAutoComponentTag()) 
       { 
        stream.skipToMatchingCloseTag(tag); 
       } 
      } 
     } 

     stream.next(); 
    } 

    return null; 
} 

當過它會在BasePanel流應用迭代標記。在查看標籤<div wicket:id="dialog">後,它重複到結束標籤</div>,所以它沒有看到ChildPanel標記

您有任何建議或解決方案嗎?

感謝, 曼努埃爾

回答

0

可以聲明一個<wicket:fragment><wicket:extend>,但不是<wicket:panel>(PANEL1)。請嘗試使用<wicket:container>代替。

+0

嗨,我已將''切換到'',但它仍會拋出MarkupNotFoundException。 – cobeete 2013-03-18 13:09:06

+0

也許這個問題不是片段,而是另一個'wicket:id'標記的標籤內的''標籤?嘗試用'((MarkupContainer)get(「dialog」))替換'add(new Fragment(「panel1」,「fragment1」,this);'add(new Fragment(「panel1」,「fragment1」,this); ' – tetsuo 2013-03-18 13:44:23

+0

感謝哲夫,但是有一個與此主題相關的開放jira問題:[https://issues.apache.org/jira/browse/WICKET-4545](https://issues.apache.org/jira/browse/WICKET-4545)。暫時的解決方案是使用'TransparentWebMarkupContainer'作爲MarkupProvider。我將結束這個問題。 – cobeete 2013-03-18 15:32:35

相關問題