当前位置: 首页 > 知识库问答 >
问题:

Ajax在检票口不为我工作

晋西岭
2023-03-14

我想在wicket 6.5中测试一些AJAX DropDown(尝试过wicket 6.6,有相同的问题)。

我使用quickstart wicket page创建了我的wicket测试项目-http://wicket.apache.org/start/quickstart.html

mvn原型:generate-DarchetypeGroupId=org。阿帕奇。wicket-DarchetypeArtifactId=wicket原型quickstart-DarchetypeVersion=6.6.0-DgroupId=net。betlista-DartifactId=测试。wicket-6.6-DarchetypeRepository=https://repository.apache.org/-DinteractiveMode=false

我在生成的WicketApplication类的getHomePage()中将HomaPage更改为我的LoadableDropDownTestPage

LoadableDropDownTestPage的Java代码是:

package net.betlista;

import java.io.Serializable;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.IAjaxIndicatorAware;
import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;

public class LoadableDropDownTestPage extends WebPage implements IAjaxIndicatorAware {

    public LoadableDropDownTestPage() {
        addComponents();
    }

    private void addComponents() {
        add(new FeedbackPanel("feedback"));

        FormObject formObject = new FormObject();
        Form<FormObject> form = new Form<FormObject>("loadableDropDownTestForm", Model.of(formObject));
        form.setOutputMarkupId(true);
        form.setOutputMarkupPlaceholderTag(true);

        final DropDownChoice<String> countryDD = new LoadableDropDown("countryDD", new PropertyModel<String>(formObject, "country"));
        countryDD.setChoices(new CountryLoadableModel());
        countryDD.setOutputMarkupId(true);
        countryDD.setRequired(true);
        countryDD.setOutputMarkupPlaceholderTag(true);

        final DropDownChoice<String> cityDD = new LoadableDropDown("cityDD", new PropertyModel<String>(formObject, "city"));
        cityDD.setChoices(new CityLoadableModel());
        cityDD.setOutputMarkupId(true);
        cityDD.setRequired(true);
        cityDD.setOutputMarkupPlaceholderTag(true);

        countryDD.add(new OnChangeAjaxBehavior() {
            @Override
            protected void onUpdate(AjaxRequestTarget target) {
                System.out.println("country DD changed");
                target.add(cityDD);
            }
        });

        form.add(countryDD);
        form.add(cityDD);

        form.add(new AjaxButton("ab") {} );

        add(form);
    }

    static class LoadableDropDown extends DropDownChoice<String> {

        public LoadableDropDown(String id, IModel<String> model) {
            super(id);
            setModel(model);
        }

    }

    static class FormObject implements Serializable {
        String country;
        String city;
    }

    class CountryLoadableModel extends LoadableDetachableModel<List<String>> {

        @Override
        protected List<String> load() {
            System.out.println("loading CountryLoadableModel");
            List<String> result = Arrays.asList(new String[] { "CR", "SR" } );
            return result;
        }

    }

    class CityLoadableModel extends LoadableDetachableModel<List<String>> {

        List<String> choices = new LinkedList<String>();

        @Override
        protected List<String> load() {
            System.out.println("loading CityLoadableModel");
            if (choices.isEmpty()) {
                choices.add("1");
            } else {
                int size = choices.size();
                choices.add(Integer.toString(size+1));
            }

            return choices;
        }

    }

    @Override
    public String getAjaxIndicatorMarkupId() {
        return "ajaxIndicator";
    }

}

页面的HTML是:

<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">

    <div wicket:id="feedback"></div>

    <form wicket:id="loadableDropDownTestForm">
        Countries: <select wicket:id="countryDD"></select><br>
        Cities: <select wicket:id="cityDD"></select><br>
        <!-- input type="submit"-->
        <button wicket:id="ab"></button>
    </form>


</html>

我的第一个问题是,我在页面上看不到AJAX调试链接。但我认为,虽然有OnChangeAjaxBehavior,但我应该看到它。

下一个问题是,当我改变国家的价值下降时,什么都没有发生,我不知道我做错了什么。

在我的代码中,您可以看到,我也尝试过AjaxButton,但它也不起作用。

编辑:

日志的一部分(它在开发模式下运行)

********************************************************************
*** WARNING: Wicket is running in DEVELOPMENT mode.              ***
***                               ^^^^^^^^^^^                    ***
*** Do NOT deploy to your live server(s) without changing this.  ***
*** See Application#getConfigurationType() for more information. ***
********************************************************************

共有2个答案

梁浩涆
2023-03-14

尝试改用ajaxFormComponentUpdateBehavior。下面是我的代码中的一个部分-

DropDownChoice<String> actionSelect = new DropDownChoice<String>("myDropdown", updateActions, choiceRenderer);
actionSelect.add(new AjaxFormComponentUpdatingBehavior("onchange") {

  @Override
  protected void onUpdate(AjaxRequestTarget target) {
    ...
  }
});
松思源
2023-03-14

我认为问题在于你没有使用

这里有一个很好的例子,说明了你在Wicket Examples上所做的事情,请看一看:http://www.wicket-library.com/wicket-examples/ajax/choice

 类似资料:
  • 问题内容: 当我想在页面中重定向到其他页面时,我使用以下方法异常: 问题是此信息在浏览器中可见。如何发送此邮件并使用POST方法? 问题答案: 在大多数浏览器中,POST重定向在某种程度上都是深奥的。Wicket的RedirectRequestHandler当前仅支持HTTP代码301和302。POST重定向将需要307,这还将向用户显示警告。 也就是说,您试图做的事情本质上是不安全的。难道 不是

  • 我是检票口开发的初学者。我有一个关于弹出对话框的问题。当我点击按钮时会触发此对话框。 此对话框包含一个复选框(Accept terms)和下面的几个单选按钮,以及两个按钮,一个是cancel,另一个是Accept。 我的问题是,我需要确保,我选择了复选框和一个无线电来设置按钮“Accept”以启用状态,否则它应该被密封(enabled=false)。 问题是单选按钮位于不同的文件中(它们位于其他文

  • 用nodewebkit封装的一个伪客户端版定火车票工具

  • 所以我运行一个脚本,调用: 它在ubuntu上运行时似乎运行良好,但当我使用Git Bash在Windows上运行时,我得到了这个错误: 它似乎试图在我的机器上运行脚本,而不是我试图调用它的实际容器。 你知道为什么会这样吗?

  • 我有一个更新存储过程,它可以完美地在我的sql上工作,但当我尝试在我的c#表单上更新时,它不会更新,但我的代码似乎是正确的,我不确定为什么我不能执行更新这是我的更新存储过程sql脚本使用[MediaPlayer]GO/*对象:StoredProcedure[dbo]。[updateBooks]脚本日期:2013年11月25日07:51:33*/SET ANSI_NULLS ON GO SET QU

  • 一个简单的 漫展 检票软件,只需要在票上面做一定顺序的条码即可,配合条码枪使用。内置音效可更换。