是否可以在扩展组件中使用Wicket片段?

是否可以在扩展组件中使用Wicket片段?,wicket,wicket-1.5,Wicket,Wicket 1.5,我试图在扩展组件中使用片段,但它抛出MarkupNotFoundException 代码与此类似: BasePanel.html <?xml version="1.0" encoding="UTF-8" ?> <wicket:panel xmlns:wicket="http://wicket.apache.org"> <div wicket:id="dialog"> <div class="titlebar">

我试图在扩展组件中使用片段,但它抛出MarkupNotFoundException

代码与此类似:

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>
<?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>
当应用程序在流上迭代时,它会在基本面板标记中查找。查看打开标记
后,它会迭代到结束标记
,因此它不会查看子面板标记的内部

你有什么建议或解决办法吗

谢谢,
Manuel

您可以在
内声明
,但不能声明
(面板1)。尝试改用

您可以在
中声明
,但不能声明
(面板1)。尝试改用

有一个与此主题相关的公开jira问题。您可以按照说明在此处解决此问题:。

有一个与此主题相关的公开jira问题。您可以按照说明在这里解决它:。

嗨,我已经将
切换到
,但它仍然抛出MarkupNotFoundException。问题可能不是片段,而是另一个
wicket:id
-标记中的
标记?尝试用
((MarkupContainer)get(“dialog”))替换
添加(新片段(“panel1”,“fragment1”,this);
。添加(新片段(“panel1”,“fragment1”,this)
谢谢Tetsuo,但有一个与此主题相关的开放jira问题:。暂时的解决方案是使用
透明的MarkupContainer
作为MarkupProvider。我将关闭此问题。嗨,我已将
切换到
,但它仍然抛出MarkupNotFoundException。可能问题不是片段,但是另一个
wicket:id
标记标记中的
标记?尝试将
添加(新片段(“panel1”,“fragment1”,this);
替换为
((MarkupContainer)get(“dialog”)。添加(新片段(“panel1”,“fragment1”,this)
谢谢Tetsuo,但是有一个与此主题相关的开放jira问题:。暂时的解决方案是使用
透明的MarkupContainer
作为MarkupProvider。我将结束此问题。
public class ChildPanel extends Panel  
{
    public ChildPanel(String id, IModel<?> model) 
    {
         super(id, model);
         add(new Fragment("panel1", "fragment1", this); 
    }
}
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;
}