我想在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標記。
您有任何建議或解決方案嗎?
感謝, 曼努埃爾
嗨,我已將''切換到'',但它仍會拋出MarkupNotFoundException。 –
cobeete
2013-03-18 13:09:06
也許這個問題不是片段,而是另一個'wicket:id'標記的標籤內的' '標籤?嘗試用'((MarkupContainer)get(「dialog」))替換'add(new Fragment(「panel1」,「fragment1」,this);'add(new Fragment(「panel1」,「fragment1」,this); ' –
tetsuo
2013-03-18 13:44:23
感謝哲夫,但是有一個與此主題相關的開放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