2015-06-11 2 views
2

Я передаю xhtml в диалог, компоненты которого динамически добавляются с серверной стороны, используя Dynamic example.Динамический рендеринг - не удается найти компонент с clientId

Использование PrimeFaces 5.1, JSF 2.1 Mojarra и 7. Tomcat

Когда я нажимаю кнопки закрытия всплывающего большое количество, чтобы из не удалось найти компонент в настоящее время рассматривается консоль затмение из-за которой близко действие имеет медленный ответ.

попытался изменить prependId к истинной на Myform. Также попытался замена@form от обновление атрибут кнопки закрытия с : myForm. Оба метода не были успешными.

Я хотел был бы знать как предотвратить это неспособный найти компонент быть вызванным.

Невозможно найти компонент с clientId editOwnerForm: tab: j_id16: iq_16_panelGroup2 ', не нужно его удалять.

Невозможно найти компонент с clientId 'editOwnerForm: tab: j_id16: j_id235', не нужно его удалять. Невозможно найти компонент с clientId 'editOwnerForm: tab: j_id16: j_id236', no необходимо удалить. Невозможно найти компонент с clientId 'editOwnerForm: tab: j_id16: j_id237', не нужно его удалять. Невозможно найти компонент с clientId 'editOwnerForm: tab: j_id16: j_id238', no необходимо удалить. Невозможно найти компонент с clientId 'editOwnerForm: tab: j_id16: j_id239', не нужно его удалять. Невозможно найти компонент с clientId 'editOwnerForm: tab: j_id16: j_id240', no необходимо удалить. Невозможно найти компонент с clientId 'editOwnerForm: tab: j_id16: j_id241', не нужно его удалять. Невозможно найти компонент с clientId 'editOwnerForm: tab: j_id16: j_id242', no необходимо удалить. Невозможно найти компонент с clientId 'editOwnerForm: tab: j_id16: j_id243', не нужно его удалять. Невозможно найти компонент с clientId editOwnerForm: tab: j_id16: iq_17_225 ', не нужно его удалять. Невозможно найти компонент с clientId 'editOwnerForm: tab: j_id16: iq_17_panelGroup2', не нужно его удалять.

myForm.xhtml

<h:form prependId="false" id="form"> 
    <p:commandButton id="editOwnerButtonId" oncomplete="PF('editOwnerDlgVar').show();" 
    actionListener="#{myViewBean.editOwner}" 
    update=":editOwnerForm" icon="ui-icon-pencil" 
    iconPos="right"> 
    <f:param name="ownerId" 
      value="#{myViewBean.id}" /> 
    </p:commandButton> 
</h:form> 

<p:dialog id="editOwnerDlgId" widgetVar="editOwnerDlgVar" 
    modal="true" closable="true" width="1200px" height="600" > 
    <ui:include src="ownerEdit.xhtml" /> 
</p:dialog> 

ownerEdit.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" 
    lang="en" xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:c="http://java.sun.com/jsp/jstl/core" 
    xmlns:shiro="http://shiro.apache.org/tags"> 

    <h:form prependId="true" id="editOwnerForm"> 
     <p:tabView id="tab" style="border-width:0px;" 
     activeIndex="#{myViewBean.tanIndex}"> 
       <p:tab > 

       </p:tab > 
      <p:tab id="dynamicResponse" title="Dynamic Response"> 
      <h:panelGroup id="sections" 
       binding="#{myViewBean.panelGroup}"> 
      </h:panelGroup> 
     </p:tab> 
    </p:tabView> 

    <p:commandButton value="Close" update=":form" id="cancelButton" 
     immediate="true" 
     actionListener="#{myViewBean.cancelOwner}" 
     icon="ui-icon ui-icon-arrowreturn-1-w" iconPos="right"> 
     <p:ajax listener="#{myViewBean.setTabIndex}" /> 
    </p:commandButton> 
    </h:form> 
</ui:composition> 

MyViewBean Dynamic Rendering код - сработал на кнопку нажмите редактировать

HtmlPanelGroup panelGroup = new HtmlPanelGroup(); 
panelGroup.getChildren().clear(); 
TabView tabView = new TabView(); 
Tab sectionTab = (Tab) tabView.findComponent("sec_" + question.getSectionId()); 
sectionTab.setId("sec_" + question.getSectionId()); 
sectionTab.setTitle(question.getSectionName()); 

HtmlPanelGrid pg = new HtmlPanelGrid(); 
pg.setColumns(3); 

OutputLabel questionText = new OutputLabel(); 
questionText.setValue(question.getTitle()); 
pg.getChildren().add(questionText); 

OutputLabel coln1 = new OutputLabel(); 
coln1.setValue(":"); 
pg.getChildren().add(coln1); 

final String respBind = "#{myViewBean.questionResponse[\""+ question.getId()+ "_"+ pet.getId()+ "_"+ question.getMultiPet() + "\"]}"; 
final ValueExpression resp = FacesContext.getCurrentInstance().getApplication() 
           .getExpressionFactory().createValueExpression(FacesContext.getCurrentInstance().getELContext(), respBind, String.class); 
InputText value = new InputText(); 
value.setId("iq_"+ String.valueOf(question.getId()) + "_"+ String.valueOf(pet.getId())); 
value.setSize(20); 
value.setValueExpression("value", resp); 

pg.getChildren().add(value); 

sectionTab.getChildren().clear(); 
sectionTab.getChildren().add(pg); 
tabView.getChildren().add(sectionTab); 
panelGroup.getChildren().add(tabView); 

ответ

2

решение Got на этот вопрос .. ,Чтобы исправить вкладку «Не удалось найти компонент с clientId»: j_id16: sec_4 ', не нужно его удалять. », Мы должны обновить jsf-банки с 2.1.7 до 2.1.9 или до 2.1.29. В приведенных ниже ссылках это сообщается как проблема Мохары.

Смотрите ссылки http://forum.primefaces.org/viewtopic.php?f=3&t=22880
https://java.net/jira/browse/JAVASERVERFACES-2383
https://java.net/jira/secure/ReleaseNote.jspa?projectId=10204&version=15535

Смежные вопросы