我打算用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
谁能说我,我的错误是什么?如何解决我的问题?
感谢。
答案 0 :(得分:2)
你没有初始化vm。你需要做类似的事情。
<div apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('foo.MainViewModel')" >
你需要这个,因为这里
@load(vm.selected)
您在未初始化的情况下访问vm
,因此zk不知道vm
是什么
那么zk应该加载或保存什么?什么是vm.selected
?