在我的登录页面中,我尝试使用密码文本字段绑定输入键按下事件。我设法解雇了事件监听器。但我面临的问题是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。
任何信息都对我很有帮助。
感谢。
答案 0 :(得分:1)
您需要通过Javascript提交您的LoginForm。这将触发通常的Wicket表单处理并将值存储在模型中。您应该可以通过以下方式提交表单:
document.getElementById('myform').submit();
但是,我还没有测试过它。