目標は、ajax によるドロップダウン リストの選択に基づいて、テキスト フィールドの内容をクリアすることです。すべてのコンポーネントは ui:repeat 内にあります。
EditableValueHolder & clearValue() 手法を使用して、Ajax 経由で更新されたが送信されていないフィールド値をリセットしました。
繰り返しのないコンポーネントに対して機能するプロセスがあります。
同じリスナーを ui:repeat コンポーネント内のコンポーネントに適用しようとすると、返される ID
partialViewContext.getRenderIds()
から「null」を返す
UIVewRoot.findComponent(renderId)
この手法を使用して、これらの繰り返しフィールドの内容をクリアできません
コンポーネント ID が UIViewRoot の検索で見つからないのはなぜですか?
public void clearModelValuesViaAjax(AjaxBehaviorEvent e) throws AbortProcessingException {
FacesContext facesContext = FacesContext.getCurrentInstance();
UIViewRoot root = FacesContext.getCurrentInstance().getViewRoot();
PartialViewContext partialViewContext = facesContext.getPartialViewContext();
for(String renderId:partialViewContext.getRenderIds()) {
if (renderId.contains("Other")) {
EditableValueHolder renderComponent = null;
String[] containers = renderId.split(":");
if (containers.length <=2) {
renderComponent = (EditableValueHolder) root.findComponent(renderId); /*NON REPEATING COMPONENTS */
} else {
renderComponent = (EditableValueHolder) root.findComponent(containers[0] + ":" + containers[containers.length-1]);
}
if (renderComponent != null) renderComponent.resetValue();
} etc