【发布时间】:2016-12-26 16:14:32
【问题描述】:
问题
我有一个Person 对象,可以在弹出窗口中进行编辑。
我需要知道,当表单被保存时,是否有一些值发生了变化。
我正在使用 全局变量 来存储对象的初始状态,但似乎该变量也已更新而我没有不明白为什么。
代码
看一下代码,它更明确(我已经删除了不相关的代码,这样更容易阅读):
模型(Person.java):
@Entity
@Table(name = "person")
public class Person {
@Column
private String lastName;
@Column
private String firstName;
}
查看模型(PersonVm.java):
@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class)
public class PersonVm {
private Person person;
private static Person initialPerson;
private PersonGroupingVm personGroupingModel;
@Init
public void init(@ExecutionArgParam("person") Person pers, @ContextParam(ContextType.VIEW) Component view) {
Selectors.wireComponents(view, this, false);
if (pers != null)
person = pers;
setPersonGroupingModel(new PersonGroupingVm(personMgr.getPersons(), new PersonComparator(), false));
}
@Command
@NotifyChange("person")
public void openEditPersonDialog(@BindingParam("person") Person pers) {
initialPerson = pers;
Map<String, Object> args = new HashMap<String, Object>();
args.put("person", pers);
Executions.createComponents(".../editPerson.zul", null, args);
}
@Command
@NotifyChange("person")
public void savePerson() {
Clients.alert(person.equals(initialPerson) + "");
Clients.alert(person.getFirstName());
Clients.alert(initialPerson.getFirstName());
// person and initialPerson both contain new values !
}
}
查看(persons.zul):
<vlayout apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('ch.myorg.vm.PersonVm')">
<grid model="@load(vmp.personGroupingModel)">
...
<template name="model" var="pers">
<row>
<label value="@load(pers.firstName)"/>
<label value="@load(pers.lastName)"/>
<button onClick="@command('openEditPersonDialog', person=pers)"/>
</row>
</template>
</grid>
</vlayout>
查看(editPersonDialog.zul):
<window apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('ch.myorg.vm.PersonVm')">
<div form="@id('p') @load(vm.person) @save(vm.person, before='savePerson')">
<textbox value="@bind(p.firstName)"/>
<textbox value="@bind(p.lastName)"/>
<button label="${labels.action.validate}" onClick="@command('savePerson')"/>
</div>
</window>
为什么我的 2 个对象(person 和 initialPerson)包含新值?仅绑定了person 对象。
【问题讨论】:
标签: java mvvm data-binding viewmodel zk