2012-04-03 5 views
5

입니다. 아쉽게도 primefaces accordionPanel은 탭을 동적으로 만들려고하는 경우 버전 2.2.1에서 제대로 작동하지 않습니다. 이것은 나의 경우입니다. 사용자가 추가 아이콘을 클릭하면 아코디언을 만들고 x 아이콘을 클릭하면 제거해야합니다. 당신은 여기에서 볼 수있는 것처럼 문제 없습니다, 나는 내 자신의 복합 구성 요소를 만들어했습니다구성 요소의 ID가 ui : repeat

<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는"업데이트해야하지만 단지 대화 상자에 아코디언 탭이 하나만있을 때 업데이트됩니다! 생성 된 html 코드를 살펴보면 differents 아코디언 탭의 스피너가 같음을 알았습니다! 아마도 이것이 값을 업데이트 할 수없는 이유 일 것입니다.

<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> 

이 이미지에서 당신이 무슨 일이 일어나고 있는지 볼 수 있습니다, 구성 요소의 ID는 내부 UI가 추가되지 않은 데이터 테이블 primefaces : 다음은이 대화 상자의 코드는 반복 인덱스 :

html inspector

방법 이 문제를 해결할 수 있습니까 ???

답변

7

이것은 안에 UIData 구성 요소를 중첩 할 때 나타나는 모하라 버그입니다. 나는 이것을 issue 1830으로보고했습니다. 지금까지 수정되지 않았으며 MyFaces에서 예상대로 작동합니다. UIRepeat은 여러모로 Mojarra에서 깨졌지만 MyFaces에서 완벽하게 작동합니다.

Mojarra를 고수하고 싶으므로 MyFaces로 대체 할 수없는 경우 UIRepeat을 전체 구성의 UIData 기반 구성 요소로 교체하십시오. 예를 들어, Tomahawk's<t:dataList>은 추가 마크 업을 생성하지 않으며 좋은 <ui:repeat> 대체품입니다. 또는 PrimeFaces의 <p:dataList>을 사용하고 목록 글 머리 기호를 CSSlist-style-type: none과 함께 숨길 수 있습니다.

업데이트 :보고 된 문제는 Mojarra 2.1.12 및 2.2.0-m06에서 수정되었습니다. 가능한 경우 적어도 해당 버전으로 업그레이드하십시오.

+0

저는 Myfaces로 바꿨습니다. 이상한 버그가 없기를 희망합니다 ... – brevleq

+0

100 % 완벽한 것은 없지만, MyFaces 개발팀은 버그 리포트를 잘 처리하고 있습니다. MyFaces 리드 개발자도 여기에서 활발히 활동 중입니다. – BalusC