2012-04-03 18 views
5

दोहराएं दुर्भाग्यवश, प्राइमफ़ेस accordionPanel संस्करण 2.2.1 में अच्छी तरह से काम नहीं करता है यदि आप गतिशील रूप से टैब बनाने की कोशिश कर रहे हैं। यह मेरा मामला है, यदि उपयोगकर्ता एक ऐड आइकन पर क्लिक करता है, तो उसे एग्रीजन बनाने की ज़रूरत है, और अगर वह एक्स आइकन पर क्लिक करता है तो उसे हटा दें। कोई बात नहीं, मैं अपने खुद के समग्र घटक बनाने के बाद, आप यहाँ देख सकते हैं जैसे:घटक यूआई के अंदर एक ही आईडी के साथ हैं:

<c:interface> 
    <c:attribute name="titulo" default="" required="false" /> 
    <c:attribute name="renderizar" default="true" required="false" /> 
    <c:attribute name="width" required="false" default="300"/> 
    <c:facet name="extra" required="false" /> 
</c:interface> 

<c:implementation> 
    <h:outputStylesheet library="css" name="hrgiAccordion.css" target="head" /> 
    <h:outputStylesheet library="css" name="clearfix.css" target="head" /> 
    <h:outputScript library="js" name="hrgiAccordion.js" target="head" /> 
    <h:panelGroup layout="block" rendered="#{cc.attrs.renderizar}" 
    styleClass="hrgi-accordion clearfix" style="width: #{cc.attrs.width}px;"> 
     <div class="hrgi-cabecalho-accordion clearfix" 
      onclick="abrirAccordion(this)"> 
      <h:outputLabel value="#{cc.attrs.titulo}" /> 
      <c:renderFacet name="extra" required="false"/> 
     </div> 
     <h:panelGroup layout="block" class="hrgi-conteudo-accordion clearfix"> 
      <c:insertChildren /> 
     </h:panelGroup> 
    </h:panelGroup> 
</c:implementation> 

यह ठीक काम करता है, लेकिन मैं कुछ विशेष की जरूरत है ... अकॉर्डियन टैब की सामग्री कुछ चुनिंदा और एक गतिशील तालिका है एक inputField और एक स्पिनर (मुझे फिर द्वारा बनाई गई) के साथ, आप यूजर इंटरफेस यहाँ देख सकते हैं:

Popup forma de pagamento

जब स्पिनरों में उपयोगकर्ता डालने मूल्यों, लेबल "कुल दास PARCELAS" अद्यतन करना चाहिए, लेकिन यह सिर्फ अपडेट करता है जब संवाद में केवल एक accordion टैब होता है! जेनरेट किए गए एचटीएमएल कोड को देखते हुए मैंने देखा है कि differents accordion टैब में स्पिनर बराबर हैं! शायद यही कारण है कि मैं मूल्यों को अद्यतन नहीं कर सकता।

<ui:composition template="../templates/popupSubmit.xhtml"> 
<ui:param name="titulo" value="#{vendaMsg['popup.forma_pagamento.titulo']}"/> 
<ui:param name="popup" value="#{modeloPopupFormaPagamento}"/> 
<ui:param name="controladorPopup" value="#{controladorPopupFormaPagamento}"/> 
<ui:define name="cabecalho"> 
    <h:panelGroup id="cabecalhoValores" binding="#{cabecalhoValores}" layout="block"> 
     <h:outputLabel value="#{vendaMsg['popup.forma_pagamento.total_prevenda']}" /> 
     <h:outputLabel value="#{preVendaBean.valorLiquido}"> 
      <f:convertNumber currencySymbol="R$" maxFractionDigits="2" 
          minFractionDigits="2" type="currency" currencyCode="BRL"/> 
     </h:outputLabel> 
     <hrgi:separador/> 
     <h:outputLabel value="#{vendaMsg['popup.forma_pagamento.total_parcelas']}" /> 
     <h:outputLabel value="#{controladorPopupFormaPagamento.calcularTotalParcelas()}"> 
      <f:convertNumber currencySymbol="R$" maxFractionDigits="2" 
          minFractionDigits="2" type="currency" currencyCode="BRL"/> 
     </h:outputLabel> 
    </h:panelGroup> 
</ui:define> 
<ui:define name="conteudo"> 
    <h:panelGroup layout="block" styleClass="clearfix hrgi-div-form"> 
     <h:panelGroup id="painelFormasDePagamento" binding="#{painelFormasDePagamento}" layout="block"> 
      <ui:repeat id="repeticao" var="formaPagamento" value="#{modeloPopupFormaPagamento.formasDePagamento}"> 
       <hrgi:accordion titulo="#{vendaMsg['popup.forma_pagamento.aba_acordeon.titulo']}" width="380"> 
        <f:facet name="extra"> 
         <p:commandLink action="#{controladorPopupFormaPagamento.removerForma(formaPagamento)}"           
             update=":#{painelFormasDePagamento.clientId}" global="false"> 
          <h:graphicImage library="img" name="remover.png"/> 
         </p:commandLink> 
        </f:facet> 
        <h:panelGroup layout="block" class="clearfix"> 
         <h:panelGroup id="painelSelecaoForma" layout="block"> 
          <h:outputLabel value="#{vendaMsg['popup.forma_pagamento.forma_pagamento']}"/> 
          <h:selectOneMenu value="#{formaPagamento.idFormaPagamento}"                 valueChangeListener="#{controladorPopupFormaPagamento.processarMudancaFormaPagamento}"> 
           <f:selectItems value="#{selectItemFormasPagamento.itens}"/> 
           <f:attribute value="#{formaPagamento}" name="formaPagamento"/> 
           <f:ajax event="change" render="painelSelecaoForma painelParcelasFormaPagamento" execute="painelSelecaoForma"/> 
          </h:selectOneMenu> 
          <h:outputLabel value="#{vendaMsg['popup.forma_pagamento.plano_pagamento']}"          /> 
          <h:selectOneMenu value="#{formaPagamento.idPlanoPagamento}"          valueChangeListener="#{controladorPopupFormaPagamento.processarMudancaPlanoPagamento}"> 
           <f:selectItems value="#{controladorPopupFormaPagamento.recuperarCarregador(formaPagamento).itens}"/> 
           <f:attribute value="#{formaPagamento}" name="formaPagamento"/> 
           <f:ajax event="change" render="painelParcelasFormaPagamento"/> 
          </h:selectOneMenu> 
         </h:panelGroup> 
         <h:panelGroup id="painelParcelasFormaPagamento" layout="block"> 
          <p:dataTable id="tabela" value="#{formaPagamento.parcelas}" var="parcela" 
             emptyMessage="#{msgGerais['gerais.sem_dados']}" 
             scrollable="#{formaPagamento.parcelas.size()>2}" 
             height="76"> 
           <p:column headerText="#{vendaMsg['popup.forma_pagamento.tabela.numero_parcela']}"> 
            <h:outputText value="#{formaPagamento.parcelas.indexOf(parcela)+1}"/> 
           </p:column> 
           <p:column headerText="#{vendaMsg['popup.forma_pagamento.tabela.vencimento_parcela']}"> 
            <hrgi:editableDate value="#{parcela.dataVencimento}" editable="true"/> 
           </p:column> 
           <p:column headerText="#{vendaMsg['popup.forma_pagamento.tabela.valor_parcela']}"> 
            <hrgi:spinner id="valor" 
              dinheiro="true" fator="0.01" local="pt-BR" 
              value="#{parcela.valor}"> 
             <f:ajax event="change" execute="@form" 
               render=":#{cabecalhoValores.clientId}"/> 
             <f:convertNumber currencySymbol="R$" maxFractionDigits="2" 
                 minFractionDigits="2" type="currency" currencyCode="BRL" 
                 for="input"/> 
            </hrgi:spinner> 
           </p:column> 
          </p:dataTable> 
         </h:panelGroup> 
        </h:panelGroup> 
       </hrgi:accordion> 
      </ui:repeat> 
     </h:panelGroup> 
     <p:commandLink immediate="true" action="#{controladorPopupFormaPagamento.adicionarForma}" 
         update="painelFormasDePagamento" global="false"> 
      <h:graphicImage library="img" name="adicionar_48.png"/> 
     </p:commandLink> 
    </h:panelGroup> 
</ui:define> 
</ui:composition> 

इस छवि में आप देख सकते हैं क्या हो रहा है, घटक की आईडी अंदर datatable ui के साथ संलग्न नहीं कर रहे हैं primefaces:: यहाँ इस संवाद के कोड है दोहराने सूचकांक:

html inspector

कैसे क्या मैं इस समस्या को हल कर सकता हूं ???

उत्तर

7

यह एक मोज़रा बग है जोके अंदर UIData घटक घोंसला करता है। मैंने कभी इसे issue 1830 के रूप में रिपोर्ट किया है। यह अभी तक तय नहीं है और यह MyFaces में अपेक्षित के रूप में काम करता है। UIRepeat Mojarra में कई मायनों में तोड़ दिया गया है, लेकिन MyFaces में सही काम करता है।

यदि आप चाहते हैं कि मोजररा से चिपकने की जरूरत है और इस प्रकार इसे माईफैस द्वारा प्रतिस्थापित नहीं किया जा सकता है, तो UIRepeat को एक पूर्ण UIData आधारित घटक द्वारा प्रतिस्थापित करने पर विचार करें। उदाहरण के लिए Tomahawk's<t:dataList> कोई अतिरिक्त मार्कअप उत्पन्न नहीं करता है और यह एक अच्छा <ui:repeat> प्रतिस्थापन है। या आप प्राइमफेसेस '<p:dataList> का उपयोग कर सकते हैं और कुछ सीएसएस list-style-type: none के साथ सूची बुलेट छुपा सकते हैं।

अद्यतन: रिपोर्ट की गई समस्या Mojarra 2.1.12 और 2.2.0-m06 में तय की गई है। तो यदि आप कर सकते हैं, तो बस उस संस्करण को अपग्रेड करें।

+0

मैंने माईफैस में बदल दिया है। उम्मीद है कि इसमें अजीब बग नहीं हैं ... – brevleq

+0

कुछ भी 100% सही नहीं है, लेकिन माईफैस देव टीम बग रिपोर्ट को संभालने पर अच्छा काम कर रही है। माईफेसेस लीड देव भी एसओ पर सक्रिय है। – BalusC

संबंधित मुद्दे