2 つの p:calendar コンポーネントから実装された jsf 複合コンポーネントがあります。アイデアは、最初のカレンダーが選択されたときに、2 番目のカレンダーの値をリセットする必要があるということです。検証時に問題が発生し、2 番目のカレンダーのリセットが実行されません。
投稿を読んだ後、バリデーターで 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 側では何も起こっていません。