0

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

0 回答 0