2013-11-11 3 views
0

Ну, у меня есть вложенные данные с использованием rowExpansion на сетях, в каждой строке дочернего datatable у меня есть кнопка для редактирования содержимого, проблема в том, что когда у меня есть несколько случаев по отцу datatable, вхождения на дочернем столе освобождают соединение с объектом, поэтому, когда я нажимаю кнопку «редактировать», ссылка неверна.Непонятные связи с соответствующим объектом

стол:

p:dataTable value="#{LiquidacaoControl.liquidacoes}" var="liquidacao" id="tbl_liquidacao" emptyMessage="Nenhuma liquidação adicionada" rendered="#{LiquidacaoControl.empenho != null}"> 
     <f:facet name="header"> 
      <h:outputText value="Tabela de Liquidações" /> 
     </f:facet> 
     <p:ajax event="rowToggle" listener="#{LiquidacaoControl.onRowExpandir}" update="tbl_documentoFiscal" /> 
     <p:column> 
      <p:rowToggler /> 
     </p:column> 
     <p:column headerText="Data"> 
      <h:outputText value="#{liquidacao.data}"> 
       <f:convertDateTime pattern="d/M/yyyy" /> 
      </h:outputText> 
     </p:column> 
     <p:column headerText="Valor da liquidação"> 
      <h:outputText value="#{liquidacao.totalValorLiquidacao}"> 
       <f:convertNumber currencySymbol="R$" type="currency" /> 
      </h:outputText> 
     </p:column> 
     <p:column headerText="Valor retido"> 
      <h:outputText value="#{liquidacao.valorTotalRetido}"> 
       <f:convertNumber currencySymbol="R$" type="currency" /> 
      </h:outputText> 
     </p:column> 
     <p:column headerText="tipo"> 
      <h:outputText value="#{liquidacao.tipo.descricao}"> 
       <f:convertNumber currencySymbol="R$" type="currency" /> 
      </h:outputText> 
     </p:column> 

     <p:column> 
      <p:commandButton icon="ui-icon-pencil" oncomplete="liquidacao_dialog.show();" update=":formCorpo:liquidacaoForm"> 
       <f:setPropertyActionListener value="#{liquidacao}" target="#{LiquidacaoControl.liquidacao}" /> 
      </p:commandButton> 
      <p:commandButton icon="ui-icon ui-icon-trash" update=":formCorpo:tbl_liquidacao" actionListener="#{LiquidacaoControl.excluirLiquidacao}"> 
       <f:attribute name="liquidacao" value="#{liquidacao}"></f:attribute> 
      </p:commandButton> 
      <p:commandButton value="Adicionar documento fiscal" update=":formCorpo:documentoFiscalForm" action="#{LiquidacaoControl.novoDocumentoFiscal}"> 
       <f:setPropertyActionListener value="#{liquidacao}" target="#{LiquidacaoControl.liquidacao}" /> 
      </p:commandButton> 
     </p:column> 
     <p:rowExpansion> 

      <p:dataTable value="#{LiquidacaoControl.documentosFiscais}" rowKey="#{documentoFiscal.hash}" selectionMode="single" var="documentoFiscal" id="tbl_documentoFiscal" emptyMessage="Nenhum Documento Fiscal"> 

       <p:ajax event="rowSelect" update=":formCorpo:tbl_retencao" oncomplete="tbl_retencao_dialog.show();" listener="#{LiquidacaoControl.onRowSelection}" /> 

       <f:facet name="header"> 
        <h:outputText value="Tabela de documentos fiscais" /> 
       </f:facet> 

       <p:column headerText="N° Doc"> 
        <h:outputText value="#{documentoFiscal.numero}"> 
        </h:outputText> 
       </p:column> 
       <p:column headerText="Chave NF-e"> 
        <h:outputText value="#{documentoFiscal.chaveAcesso}"> 
        </h:outputText> 
       </p:column> 
       <p:column headerText="Data emissão"> 
        <h:outputText value="#{documentoFiscal.dataEmissao}"> 
         <f:convertDateTime pattern="d/M/yyyy" /> 
        </h:outputText> 
       </p:column> 
       <p:column headerText="Valor"> 
        <h:outputText value="#{documentoFiscal.valor}"> 
         <f:convertNumber currencySymbol="R$" type="currency" /> 
        </h:outputText> 
       </p:column> 
       <p:column headerText="Valor retido"> 
        <h:outputText value="#{documentoFiscal.valorTotalRetido}"> 
         <f:convertNumber currencySymbol="R$" type="currency" /> 
        </h:outputText> 
       </p:column> 
       <p:column> 
        <p:commandButton icon="ui-icon-pencil" update=":formCorpo:documentoFiscalForm" actionListener="#{LiquidacaoControl.editarDocumentoFiscal}"> 
         <f:attribute name="documentoFiscal" value="#{documentoFiscal}"></f:attribute> 
        </p:commandButton> 
        <p:commandButton icon="ui-icon ui-icon-trash" update=":formCorpo:tbl_liquidacao" actionListener="#{LiquidacaoControl.excluirDocumentoFiscal}"> 
         <f:attribute name="documentoFiscal" value="#{documentoFiscal}"></f:attribute> 
        </p:commandButton> 
        <p:commandButton value="Adicionar retenção" onclick="retencao_dialog.show();" actionListener="#{LiquidacaoControl.novaRetencao}" update=":formCorpo:retencaoForm"> 
         <f:setPropertyActionListener value="#{documentoFiscal}" target="#{LiquidacaoControl.documentoFiscal}" /> 
        </p:commandButton> 
       </p:column> 

      </p:dataTable> 

     </p:rowExpansion> 
    </p:dataTable> 

методы:

public void editarDocumentoFiscal(ActionEvent event) { 
    DocumentoFiscal pDocumentoFiscal = (DocumentoFiscal) event.getComponent().getAttributes().get("documentoFiscal"); 
    setDocumentoFiscal(pDocumentoFiscal); 
    RequestContext.getCurrentInstance().execute("documentoFiscal_dialog.show()"); 
} 

    public void excluirDocumentoFiscal(ActionEvent event) { 
    DocumentoFiscal pDocumentoFiscal = (DocumentoFiscal) event.getComponent().getAttributes().get("documentoFiscal"); 
    encontrarPaiDocumentoFiscal(pDocumentoFiscal); 
    liquidacao.getDocumentosFiscais().remove(pDocumentoFiscal); 
} 
    public void onRowExpandir(ToggleEvent event) { 
    documentosFiscais = new DocumentoFiscalModel(((Liquidacao) event.getData()).getDocumentosFiscais()); 
    RequestContext.getCurrentInstance().update("formCorpo:tbl_documentoFiscal"); 
} 

Вот это спасибо заранее.

+0

Не обижайтесь, но гнездовые DataTables звучит страшно. Если вашему требованию действительно не нужна такая реализация, лучше использовать 'ui: repeat' в качестве репитера. –

+0

Я знаю, но мне необходимо использовать эту реализацию – danillosl

ответ

0

Это проблема с состоянием клиента в JSF, это работает для моей

web.xml добавить

<context-param> 
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description> 
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
    <param-value>server</param-value> 
</context-param> 
Смежные вопросы