我有bean用户的信息,我想更新这个用户。 但我的问题是:当inputtext的值改变时,我想对它进行验证。 如果新值错误,我想重置旧值。
请任何人帮助我
答案 0 :(得分:2)
您的“InputText”标记中必须包含ValueChangeListener属性。 在您的方法中,声明为侦听器,您具有包含旧值的ValueChangeEvent对象。你可以这样做:
public void myValChanged(ValueChangeEvent event) {
try {
validate(event.getNewValue());
myValue = event.getNewValue();
} catch (Exception ex) {
/*
Listeners are called before update model values in the request lifecycle so any changes you make in that phase are overwritten by the actual values in the page.
By changing the event's phase to UPDATE_MODEL_VALUES or INVOKE_APPLICATION your changes will overwrite those currently set in the page, which is what you need.
*/
myValue = event.getOldValue();
if (!event.getPhaseId().equals(PhaseId.INVOKE_APPLICATION)) {
event.setPhaseId(PhaseId.INVOKE_APPLICATION);
event.queue();
return;
}
}
}
使用PhaseId操作的想法是 - 不允许你的ValueChangeListener覆盖你的
变量集“myValue = event.getOldValue();
”