目标是通过 ajax 根据下拉列表选择清除文本字段内容。所有组件都位于 ui:repeat 中。
我使用 EditableValueHolder & clearValue() 技术来重置通过 Ajax 更新但未提交的字段值。
我的流程适用于非重复组件。
当我尝试将相同的侦听器应用于 ui:repeat 组件中的组件时,返回的 id
partialViewContext.getRenderIds()
从返回“null”
UIVewRoot.findComponent(renderId)
我无法使用此技术清除这些重复字段的内容
为什么在 UIViewRoot 的搜索中找不到组件 id?
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