0

ログインページで、Enter キーを押すイベントをパスワードテキストフィールドにバインドしようとしています。イベントリスナーを起動することができました。しかし、私が直面している問題は、ユーザー名のテキスト フィールドの値が 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を返します。

どんな情報も私にとって非常に役に立ちます。

ありがとう。

4

1 に答える 1

1

LoginForm を Javascript 経由で送信する必要があります。これにより、通常の Wicket フォーム処理がトリガーされ、値がモデルに保存されます。次の方法でフォームを送信できるはずです。

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

しかし、私はそれをテストしていません。

于 2012-05-22T09:49:33.857 に答える