0

私のdroDownBoxは次のようになります。

        add(new DropDownChoice<String>("hladaneSlovo", new HladaneSlova()).add(new AjaxEventBehavior("onchange") {

            private static final long serialVersionUID = 1L;

            @Override
            protected void onEvent(AjaxRequestTarget target) {
                target.prependJavaScript("window.location.href='" + urlFor(VyjimkyPage.class, null) + "'");

            }

        }));

これは私のベースページにあります。デフォルト値もあります。選択したオプションの1つを選択したときにページを変更するにはどうすればよいですか?私が今作成した実装の問題はデフォルト値にあります。すでに選択されているアイテムを選択したとき、何もしていません。値を選択すると、どのような動作が呼び出されますか?

4

2 に答える 2

0

選択した値が検証に合格し、ドロップダウンのモデルを更新する必要がある場合は、モデルを更新しないAjaxEventBehaviorを使用する代わりに、 AjaxFormChoiceComponentUpdatingBehaviorを使用する必要があります(Choices またはグループ)。

DropDownChoice choice = new DropDownChoice("hladaneSlovo", new HladaneSlova());
add(choice);
choice.add(new AjaxFormChoiceComponentUpdatingBehavior()
{
    @Override
    protected void onUpdate(AjaxRequestTarget target)
    {
        //The model is now updated so you can push to DB or pass as PageParameter to the next page

        // throw a RedirectException so that the url will be updated for your page
        throw new RedirectException(VyjimkyPage.class); 
    }
});

注:実装で直面している問題の一部は、add() メソッドを連鎖させていることです。add メソッドの戻り値はコンポーネントですが、追加したばかりのコンポーネントではなく、追加先のコンポーネントです。AjaxEventBehavior を追加するときは、イベントをリッスンするコンポーネントにそれらを追加する必要があります。

于 2012-07-02T11:19:28.780 に答える
0

ページを変更したい場合は、AJAX を使用する必要がないため、次のようにすることができます。

DropDownChoice<String> dropDownChoice = new DropDownChoice<String>("hladaneSlovo", new HladaneSlova()) {
        @Override
        protected boolean wantOnSelectionChangedNotifications() {
            return true;
        }

        @Override
        protected void onSelectionChanged(String newSelection) {
            setResponsePage(NewPage.class);
        }
};

AjaxFormComponentUpdatingBehaviorまた、JavaScript イベントが発生したときにモデルを更新する場合は、動作を使用する必要があるため、実装では値はデフォルトのままです。

于 2012-07-02T06:54:51.533 に答える