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) + "'");

            }

        }));

这在我的基本页面中有。还有一些默认值。当我选择其中一个选项时如何更改页面?我现在创建的实现问题是默认值。当我选择已经选择的项目时,什么都没有做。选择 value 时调用什么行为?

4

2 回答 2

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 回答
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 方法的返回值是一个 Component,但它不是您刚刚添加的 Component,而是您正在添加的 Component。添加 AjaxEventBehavior 时,应将它们添加到要侦听事件的组件中。

于 2012-07-02T11:19:28.780 回答