我在zul页面中绑定了一个对象,在zul页面内用户可以通过按编辑按钮编辑该对象的值。当用户单击编辑按钮时,对象的值在编写器内部发生更改(并且对象的值也会在数据库中更改)。然后,它返回到同一个zul页面。但是在zul中没有更改binded元素的值。只有刷新页面我才能看到变化。如何在不刷新页面的情况下更改绑定元素的值,或者通过刷新zul中的zk窗口?据我所知,有一种方法可以使用ModelBinding(zk: after confirmation box, page refresh issue, binder not working)在我的情况下,没有ModelBinding,当用户点击编辑按钮时,我必须在Composer中做。
public class EditUserDetailsComposer extends GenericForwardComposer<Component>{
protected Window userDetailWin;
private Person selectedUser;
protected Textbox name;
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
comp.setAttribute("userDetailController", this, true);
//...
}
public void onClick$edit(){
this.selectedUser.setName(name.getValue());
//...
userOper.update(selectedUser);//change db value
}
public Person getSelectedUser(){
return this.selectedUser;
}
//...
}
在zul页面内:
<zk xmlns:c="client" xmlns:x="xhtml">
<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" root="./userDetailWin"?>
<window id="userDetailWin" apply="project.component.EditUserDetailsComposer " >
........
<div class="widget-body">
<div class="widget-main">
<div class="form-group">
<div class="col-xs-12 col-sm-5">User Name</div>
<div class="col-sm-reset">
<textbox value = "@{userDetailController.selectedUser.name}" id="name"/>
</div>
</div>
<separator></separator>
</div>
</div>
......
<button class="btn btn-primary" label="Edit" id="edit"/>
...