UserPage.java
public class UserPage extends WebPage {
public UserPage(final PageParameters parameters) {
final CheckBox chk0 = new CheckBox("chk", Model.of(Boolean.FALSE));
add(new FeedbackPanel("feedback"));
final TextField<String> username = new TextField<String>("username", Model.of(""));
username.setRequired(true);
username.add(new UsernameValidator());
final TextField<String> user = new TextField<String>("user", Model.of(""));
user.setRequired(true);
user.add(new UsernameValidator());
user.add(AttributeModifier.replace("readonly", "readonly")); //Disabled Text Field
Form<?> form = new Form<Void>("userForm") {
@Override
protected void onSubmit() {
final String usernameValue = username.getModelObject();
PageParameters pageParameters = new PageParameters();
pageParameters.add("username", usernameValue);
setResponsePage(SuccessPage.class, pageParameters);
}
};
add(form);
form.add(username);
form.add(chk0);
form.add(user);
UserPage.html
<div wicket:id="feedback"></div>
<form wicket:id="userForm">
<input type="checkbox" wicket:id="chk" />
<p>
<label>Username</label>: <input wicket:id="username" type="text"
size="20" />
<input wicket:id="user" type="text"
size="20" />
</p>
<input type="submit" value="Register" />
</form>
我有2个文本字段..“用户名”和“用户”。 用户名是启用文字字段,用户是禁用文字字段。
但是我需要在点击JAVA中的Checkbox时禁用/启用文本字段。 怎么实现这个? 我只是一个初学者。非常感谢.Thankyou。
答案 0 :(得分:1)
我正在使用wicket 7.5
要点击您的复选框,请触发从浏览器到wicket的http请求,更新某些状态并重新呈现页面的一部分,您应该向CheckBox添加AjaxBehavior或使用便捷类AjaxCheckBox(它添加了AjaxBehavior for you)。
我已经简化了你的示例,只是为了展示你如何使用复选框来启用/禁用你的一个文本字段并进行往返检查。
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
<body>
<input type="checkbox" wicket:id="chk" />
<p>
<label>Username</label>:<input wicket:id="username" type="text" size="20" />
</p>
</body>
</html>
final Model<Boolean> checkboxModel = Model.of(false);
final TextField<String> username = new TextField<String>("username", Model.of("")){
@Override
public boolean isEnabled() {
return !checkboxModel.getObject();
}
};
//instruct wicket to write an id on the html element so it can replace it via javascript
username.setOutputMarkupId(true);
username.setRequired(true);
//AjaxCheckBox is 'A CheckBox which is updated via ajax when the user changes its value'
final CheckBox chk0 = new AjaxCheckBox("chk", checkboxModel) {
@Override
protected void onUpdate(AjaxRequestTarget target) {
//re-render the username textfield
target.add(username);
}
};
add(username, chk0);
这是一个使用行为而不是便利类的示例。
public HomePage(final PageParameters parameters) {
final Model<Boolean> checkboxModel = Model.of(false);
final TextField<String> username = new TextField<String>("username", Model.of("")){
@Override
public boolean isEnabled() {
return !checkboxModel.getObject();
}
};
//instruct wicket to write an id on the html element so it can replace it via javascript
username.setOutputMarkupId(true);
username.setRequired(true);
final CheckBox chk0 = new CheckBox("chk", checkboxModel);
chk0.setOutputMarkupId(true);
updateOnClick(chk0, username);
add(username, chk0);
}
static void updateOnClick(Component a, final Component b){
a.add(new AjaxFormComponentUpdatingBehavior("click"){
@Override
protected void onUpdate(AjaxRequestTarget target) {
target.add(b);
}
});
}