Wicket:在提交时更改AjaxButton的文本

时间:2011-03-22 17:46:05

标签: java ajax button wicket ria

我是Wicket的菜鸟并尝试在提交时更改AjaxButton的文本。因此,我们的想法是,第一次加载页面时,用户会看到标记为例如的AjaxButton。 “1”,点击按钮后,按钮的标签变为“2”,下次点击后变为“3”等等......这可不难,但正如我所说,我是一个在谈到检票口时的noobie。所有帮助表示赞赏!

form.add(new AjaxButton("ajax-button", form)
    {
        @Override
        protected void onSubmit(AjaxRequestTarget target, Form<?> form)
        { //how to change Button label here?
         }

}

2 个答案:

答案 0 :(得分:8)

答案很简单:使用模型。

        //counter field declared in page class
        private int counter;

            ...

    form.add(new AjaxButton("ajax-button", new PropertyModel<String>(this,
            "counter", form)) {

        @Override
        protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
            counter++;
            target.addComponent(this);

        }
    });

这可能是Wicket最重要的规则:当你需要改变时,使用模型。这需要一些时间来习惯,特别是如果你有更多“传统”框架的经验,并且还没有使用过Swing。

N.b。:将计数器保留在页面类中可能不是一个好主意,但总的想法是一样的。

答案 1 :(得分:0)

除了biziclop的回答之外,这里还有一个带有参数变化的文本解决方案。

在你的java代码中:

Weapon

在你的HTML中:

AjaxButton yourButton = new AjaxButton("btnId"){
//your button's implementation goes here
};
int yourVariable = 42;
Label yourLabel = new Label("labelId", new Model<String>() {
        public String getObject() {
            String text = MessageFormat.format(new Localizer().getString("IdForLocalizerInYourLocalizerFile", null), yourVariable);
            return text;
        }
    })
yourButton.add(yourLabel);

最后,您的本地化文件将包含如下行:

  <a type="submit" wicket:id="btnId">
    <span wicket:id="labelId">[This text will never be seen, will be replaced by "The var..."]</span>
  </a>