我是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?
}
}
答案 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>