0

私はzkフレームワークでログインしようとしていますが、私の見解は次のとおりです。

<zk xmlns:h="xhtml" xmlns:w="client">

<div apply="org.zkoss.bind.BindComposer"
     form="@id('fx') @load(vm.selected) @save(vm.selected, before='update') @validator('com.java2eehub.FormValidator',retypedPassword=vm.retypedPassword)">
    <grid>
        <rows>
            <row>email<textbox value="@bind(fx.email)" /></row>
            <row>password<textbox value="@bind(fx.password)" type="password"/></row>
            <row>retype password<textbox value="@bind(fx.retypePassword)" type="password"/></row>
            <row>
                <cell colspan="3" style="text-align:center">
                    <vlayout>
                        <label visible="@load(empty vmsgs)"
                               value="@load(empty vmsgs ? 'Form successfully submitted!' : '', before='submit')" />
                        <button label="Submit" onClick="@command('submit')"
                                width="100px" height="30px" />
                    </vlayout>
                </cell>
            </row>
        </rows>
    </grid>
</div>
</zk>

データを検証するためのJavaクラスがあります:

package com.java2eehub;
import java.util.Map;

import org.zkoss.bind.Property;
import org.zkoss.bind.ValidationContext;
import org.zkoss.bind.validator.AbstractValidator;

public class FormValidator extends AbstractValidator {

public void validate(ValidationContext ctx) {
    //all the bean properties
    Map<String,Property> beanProps = ctx.getProperties(ctx.getProperty().getBase());
    //first let's check the passwords match
    validatePasswords(ctx, (String)beanProps.get("password").getValue(), (String)ctx.getValidatorArg("retypedPassword"));
    validateEmail(ctx, (String)beanProps.get("email").getValue());
}

private void validatePasswords(ValidationContext ctx, String password, String retype) { 
    if(password == null || retype == null || (!password.equals(retype))) {
        this.addInvalidMessage(ctx, "password", "Your passwords do not match!");
    }
}


private void validateEmail(ValidationContext ctx, String email) {
    if(email == null || !email.matches(".+@.+\\.[a-z]+")) {
        this.addInvalidMessage(ctx, "email", "Please enter a valid email!");            
    }
}

}

私はビュー モデルを持っていません:, なぜ MainVIewModel が必要なのですか?, パスワードと再パスワードの間の検証と電子メールのみを行う必要があります, この場合、mainviewmodel は何でしょうか?

viewModel="@id('vm') @init('foo.MainViewModel')" ログインを実行しないと 、次のエラーが発生します。

org.zkoss.zk.ui.UiException: Objetivo inalcanzable, identificador 'vm' resuelto a nulo at

誰が私に言うことができますか、私の間違いは何ですか、どうすれば問題を解決できますか?

ありがとう。

4

1 に答える 1

2

vm を初期化していません。のようなことをする必要があります。

   <div apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('foo.MainViewModel')" >

編集

ここにあるので、これが必要です

@load(vm.selected)

初期化せずにアクセスvmするので、zk は何なのかわかりませんvm
では、zk は何をロードまたは保存する必要があるのでしょうか? とはvm.selected?

于 2013-09-11T11:22:52.070 に答える