目标是通过ajax根据下拉列表选择清除文本字段内容。所有组件都位于ui:repeat内。
我使用了EditableValueHolder& clearValue()技术重置通过Ajax更新但未提交的字段值。
我让这个过程适用于非重复组件。
当我尝试将相同的侦听器应用于ui:repeat组件内的组件时,
返回的IDpartialViewContext.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