2013-01-23 60 views
1

我試圖從對話框中更新文本字段。文本字段位於父組件中。但沒有發生。如果我在更新命令按鈕時給出文本字段的ID。我遇到的錯誤: javax.faces.FacesException:無法找到標識「customerCode」組件從「TabView的:lkpSltRec」引用Primefaces:對話框隱藏時不更新文本字段

既然是無法找到組件的id。我已經使用了替代方案。我點了隱藏字段。單擊命令按鈕後,隱藏字段被更新,並通過簡單的JavaScript函數更新父組件的文本字段。在對話框的命令按鈕的oncomplete中調用javascript函數。因爲,根據項目要求,我必須通過primefaces而不是通過javascript來實現它。 Plz,建議我在primefaces中的方法。下面的代碼片段:

這裏ECAP:查找是自定義組件。

Selected Customer <p:inputText id="customerCode" 
     value="#{sixthTabBBean.customerName}" label="Selected Adddress"></p:inputText> 
    Selected Customer City <p:inputText id="selectedCity" value="#{sixthTabBBean.customerCity}" ></p:inputText> 
    <ecap:lookup lookupId="LOV0072" inputId="customerCode" clickStatus="city" 
     defaultDDValueIndex="0" title="CustomerCode"></ecap:lookup> 

     New LOV <ecap:lookup lookupId="LOV0092" inputId="customerCode" clickStatus="none" 
     defaultDDValueIndex="0" title="CustomerCode"></ecap:lookup> 

    City<p:inputText id="custCity" value="#{sixthTabBBean.customerCity}" 
     disabled="true" label="City"></p:inputText> 
    Selected Customer <p:inputText id="customerCode1" 
     value="#{sixthTabBBean.customerName}" label="Selected Adddress" ></p:inputText> 
    Selected Customer City <p:inputText id="selectedCity1" value="#{sixthTabBBean.customerCity}" ></p:inputText> 
    Selected Customer State <p:inputText id="selectedSate1"  value="#{sixthTabBBean.customerState}" ></p:inputText> 
    <ecap:lookup lookupId="LOV0098" inputId="customerCode" clickStatus="state" 
     defaultDDValueIndex="0" title="CustomerCode"></ecap:lookup> 
    <p:dialog id="lkpDialog" widgetVar="lpDialogVar" header="Lookup" 
     modal="true" width="1000" height="600" 
     rendered="#{lookupSearch.popupRender}" > 
     <h:form rendered="#{lookupSearch.popupRender}" prependId="false"> 
      <h:panelGrid cellpadding="10" id="diaFrmId"> 
       <p:dataTable id="newfdt" var="flxSearch" 
        value="#{lookupSearch.lkpSearchCriteriaList}"> 

        <p:column id="newwhc"> 
         <f:facet name="header"> 
          <h:outputLabel value="Search Fields"></h:outputLabel> 
         </f:facet> 
         <p:selectOneMenu styleClass="fdd180" id="newwdd" 
          value="#{flxSearch.searchCriterion.whereClause}"> 
          <f:selectItems value="#{flxSearch.whrClausDropdown}" /> 
         </p:selectOneMenu> 
        </p:column> 

        <p:column id="newcoc"> 
         <f:facet name="header"> 
          <h:outputLabel value="Conditions"></h:outputLabel> 

         </f:facet> 
         <p:selectOneMenu id="newco" styleClass="fdd95" 
          value="#{flxSearch.searchCriterion.operator}"> 
          <f:selectItems id="newcriOperatorItms" 
           value="#{flxSearch.operatorDropdown}" /> 
         </p:selectOneMenu> 
        </p:column> 

        <p:column id="newcic"> 
         <f:facet name="header"> 
          <h:outputLabel value="Value"></h:outputLabel> 

         </f:facet> 
         <p:inputText id="newcriInpNm" 
          rendered="#{!flxSearch.inputDate and !flxSearch.boolValue and !flxSearch.required}" 
          styleClass="285 ftb" deferChangeEvent="true" 
          value="#{flxSearch.searchCriterion.value}" 
          maxlength="#{flxSearch.maxLength}" 
          disabled="#{flxSearch.disableInput}" partialSubmit="true" 
          labelValue="#{flxSearch.searchCriterion.label}" 
          required="#{flxSearch.required}"> 
         </p:inputText> 

         <p:inputText id="newcriInpM" 
          rendered="#{!flxSearch.inputDate and !flxSearch.boolValue and flxSearch.required }" 
          value="#{flxSearch.searchCriterion.value}" 
          maxlength="#{flxSearch.maxLength}" 
          disabled="#{flxSearch.disableInput}" 
          labelValue="#{flxSearch.searchCriterion.label}" 
          required="#{flxSearch.required}"> 

         </p:inputText> 

         <p:selectOneMenu styleClass="fdd" id="newbldd" 
          value="#{flxSearch.searchCriterion.value}" 
          disabled="#{flxSearch.disableInput}" 
          rendered="#{flxSearch.boolValue }"> 
          <f:selectItems value="#{flxSearch.booleanDropdown}" /> 
         </p:selectOneMenu> 

         <p:calendar id="newcriDtNm" size="9" 
          rendered="#{flxSearch.inputDate and !flxSearch.boolValue and !flxSearch.required }" 
          disabled="#{flxSearch.disableInput}" showOn="button" 
          value="#{flxSearch.searchCriterion.value}" 
          labelValue="#{flxSearch.searchCriterion.label}"> 
         </p:calendar> 

         <p:calendar id="newcriDtM" size="9" 
          rendered="#{flxSearch.inputDate and !flxSearch.boolValue and flxSearch.required }" 
          disabled="#{flxSearch.disableInput}" 
          value="#{flxSearch.searchCriterion.value}" 
          enableChangeDetector="false" partialSubmit="true" 
          labelValue="#{flxSearch.searchCriterion.label}" 
          required="#{flxSearch.required}" showOn="button"> 
         </p:calendar> 

        </p:column> 
       </p:dataTable> 
       <!-- hidden text used to update values in the parent component --> 
       <p:inputText type="hidden" id="hiddencustomerCode" 
        value="#{sixthTabBBean.customerName}" ></p:inputText> 
       <p:inputText type="hidden" id="hiddencustCity" 
        value="#{sixthTabBBean.customerCity}" ></p:inputText> 
       <p:inputText type="hidden" id="hiddencustState" 
       value="#{sixthTabBBean.customerState}" ></p:inputText> 

       <p:fieldset legend="Combined By"> 
        <h:panelGrid columns="2" cellpadding="10"> 
         <p:selectOneRadio id="newSlctDrk" 
          valueChangeListener="#{lookupSearch.getSelectedLogOpr}" 
          value="#{lookupSearch.selLogOpr}" 
          title="Combine all search criteria with AND or OR"> 
          <f:selectItems id="newSlctDrkItms" 
           value="#{lookupSearch.logicalOperators}" /> 
         </p:selectOneRadio> 
        </h:panelGrid> 
       </p:fieldset> 
       <h:panelGrid columns="3"> 
        <p:commandButton value="Find" id="lkpfndDg" update="resultFldSet" 
         actionListener="#{lookupSearch.search}"> 
        </p:commandButton> 
        <p:commandButton value="Clear" id="lkpClearDg" 
         actionListener="#{lookupSearch.clear}" /> 
       </h:panelGrid> 
       <p:fieldset legend="Result" id="resultFldSet"> 
         <p:dataTable binding="#{lookupSearch.lkpResultDataTable}" 
          value="#{lookupSearch.searchResultsForPage}"></p:dataTable> 
       </p:fieldset> 
       <p:commandButton value="Select" id="lkpSltRec" update="customerCode" 
        oncomplete="lpDialogVar.hide();insertSelectedValue();" 
        actionListener="#{lookupSearch.selectValue}" /> 
      </h:panelGrid> 
     </h:form> 
    </p:dialog> 

</h:panelGrid> 

這裏ecap:查找是自定義組件。

+0

_如果我在命令按鈕的更新中給出文本字段的ID。我遇到了錯誤:_你是如何引用'ID'的?如果你像這樣'update =「customerCode」'那麼它就不會工作,因爲你的'commandButton'在另一個'form'中。嘗試以這種方式引用它'update =「:customerCode」'(**:** added),所以你實際上跳到表單之外並搜索'ID =「customerCode」'。另外我假設你沒有用'form'包裝'inputText'因爲你的自定義組件需要,否則它們不會被提交。 – Fallup

回答

0

最後,我已經得到了解決方案。我遇到的例外是因爲表單標籤。在這種情況下,使用: :#{p:component('componentId')}

在這裏它會搜索id不僅在形式,但在它之外。