当组件位于ui时,通过getRenderId()定位的组件ID在UIVewRoot搜索时返回null:repeat

时间:2013-05-03 16:26:06

标签: ajax jsf-2

目标是通过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

0 个答案:

没有答案