按Enter键提交表格 - 文本字段值为空

时间:2012-05-12 20:23:29

标签: java ajax events form-submit wicket-1.5

在我的登录页面中,我尝试使用密码文本字段绑定输入键按下事件。我设法解雇了事件监听器。但我面临的问题是textfield用户名的值返回null,但密码字段的值不为null。代码如下:

public class LoginForm extends Form<Void> {
    private transient final ValueMap properties = new ValueMap();

    public LoginForm(final String formId) {
        super(formId);

        final TextField<String> username = new TextField<String>("username", new PropertyModel<String>(getProperties(), "username"));
        add(username);

        final TextField<String> password = new TextField<String>("password", new PropertyModel<String>(getProperties(), "password"));
        add(password);

        password.add(new AjaxFormComponentUpdatingBehavior("onkeypress") {

            @Override
            protected void onComponentTag(ComponentTag tag) {
                Component component = getComponent();
                if (component.isEnabled() && component.isEnableAllowed()) {
                    CharSequence handler = generateCallbackScript(new AppendingStringBuffer("wicketAjaxPost('").append(getCallbackUrl()).append("', wicketSerialize(Wicket.$('" + getComponent().getMarkupId() + "'))"));
                    String event = "if (event.keyCode == 13) {" + handler.toString() + "};";
                    tag.put("onkeypress", event);
                }
            }

            @Override
            protected void onUpdate(AjaxRequestTarget target) {                 
                System.out.println(getUsername());
                System.out.println(getPassword());
            }
        });
    }

    public ValueMap getProperties() {
        return properties;
    }

    private String getPassword() {
        return getProperties().getString("username");
    }

    private String getUsername() {
        return getProperties().getString("password");
    }
}

system.out正在打印

null
password

我也尝试使用username.getDefaultModelObject(),但也返回null。

任何信息都对我很有帮助。

感谢。

1 个答案:

答案 0 :(得分:1)

您需要通过Javascript提交您的LoginForm。这将触发通常的Wicket表单处理并将值存储在模型中。您应该可以通过以下方式提交表单:

document.getElementById('myform').submit(); 

但是,我还没有测试过它。