【发布时间】:2012-07-11 08:40:09
【问题描述】:
我有一个由两个 p:calendar 组件实现的 jsf 复合组件。 这个想法是选择第一个日历时,需要重置第二个日历的值。验证时出现问题,没有执行第二个日历的重置。
阅读帖子后,我决定在我的验证器中使用 EditableValueHolder。 我有自定义验证器:我在其中添加了以下代码:
@Override
public void validate(FacesContext fc, UIComponent uic, Object o) throws ValidatorException {
//....
resetValues(fc);
}
public void resetValues(FacesContext fc) {
PartialViewContext partialViewContext = fc.getPartialViewContext();
Collection<String> renderIds = partialViewContext.getRenderIds();
UIComponent input;
UIViewRoot viewRoot = fc.getViewRoot();
for (String renderId : renderIds) {
input = viewRoot.findComponent(renderId);
if (input.isRendered() && input instanceof EditableValueHolder) {
EditableValueHolder editableValueHolder = (EditableValueHolder) input;
editableValueHolder.setSubmittedValue(null);
editableValueHolder.setValue(null);
editableValueHolder.setValid(true);
editableValueHolder.setLocalValueSet(false);
}
}
}
调试后我可以看到每一行代码都通过了,但是jsf端什么都没有发生。
【问题讨论】:
标签: jsf primefaces java-ee-6