Wicket - 使用Checkbox禁用/启用Textfield

时间:2016-12-15 05:51:28

标签: java checkbox wicket

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。

1 个答案:

答案 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>

AjaxCheckBox

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);

这是一个使用行为而不是便利类的示例。

AjaxBehavior

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);
        }
    });
}