1

Extend コンポーネント内でフラグメントを使用しようとしていますが、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>

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); 
    }
}

問題は Wicket 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">、終了タグまで反復するため、 ChildPanel マークアップ</div>内は検索されませんでした。

提案や解決策はありますか?

ありがとう、マヌエル

4

2 に答える 2

1

このトピックに関連する公開済みの jira 課題があります。https://issues.apache.org/jira/browse/WICKET-4545の指示に従って解決できます。

于 2013-03-18T15:33:39.470 に答える
0

<wicket:fragment>insideは宣言できますが<wicket:extend><wicket:panel>(panel1) は宣言できません。<wicket:container>代わりに使用してみてください。

于 2013-03-18T03:17:44.710 に答える