Data does not persist when saving with dialog box

Asked

Viewed 55 times

0

I have a list where I want to select the item change a product table field and save to the bank through a dialog. Knowing that a product has several historical , ie the relationship is Onetomany . It happens that the item is not being changed. Is there any problem sending the item from a history list and changing the product field by saving the history?

Follow the xhtml code from the list:

<p:dataTable id="historicosTable"
                value="#{pesquisaPrevisaoBean.lazyModel}" var="historico"
                style="margin-top: 20px" emptyMessage="#{msg.nenhum_tecnico}"

                paginatorPosition="bottom" rows="5" paginator="true"
                paginatorTemplate="{RowsPerPageDropdown} {PreviousPageLink} {CurrentPageReport} {NextPageLink}"
                currentPageReportTemplate="(#{msg.pagina} {currentPage} #{msg.de} {totalPages}) - (#{msg.registro} {startRecord} #{msg.a} {endRecord}) - Total ({totalRecords} #{msg.registros})"
                styleClass="mystyle" paginatorAlwaysVisible="true"
                rowsPerPageTemplate="10, 20, 30" lazy="true" editable="true"
                editMode="cell">

                <f:facet id="header" name="header">
               Previsão de Vendas
            </f:facet>


                <p:column headerText=" Codigo do Produto"
                    sortBy="#{historico.produto.codigoProduto}"
                    style="text-align: center; width: 140px">

                    <p:commandLink value="#{historico.produto.codigoProduto}"
                        update=":userDetailForm:display" oncomplete="userDialog.show()"
                        title="View">
                        <f:setPropertyActionListener value="#{historico}"
                            target="#{pesquisaPrevisaoBean.previsaoSelecionada}" />
                    </p:commandLink>
                </p:column>

follows the xhtml code of the dialog :`

<p:dialog header="Alterar Previsão" widgetVar="userDialog"
            resizable="false" id="userDlg">
            <h:form id="userDetailForm">
                <p:panelGrid id="display" columns="4" cellpadding="4"
                    style="margin:0 auto;">


                    <p:outputLabel value="Ultimo Ano:" for="ultimoAno" />
                    <p:inputText id="ultimoAno"
                        value="#{pesquisaPrevisaoBean.previsaoSelecionada.produto.anoAnterior}" />

                    <p:outputLabel value="Quantidade:" for="quantidade" />
                    <p:inputText id="quantidade" disabled="true"
                        value="#{pesquisaPrevisaoBean.previsaoSelecionada.produto.ultimaQuantidade}" />

                    <p:outputLabel value="terceiro Mês:" for="terceiroMes" />
                    <p:inputText id="terceiroMes"
                        value="#{pesquisaPrevisaoBean.previsaoSelecionada.produto.terceiroMesAnterior}" />

                    <p:outputLabel value="Quantidade:" for="quantidade4" />
                    <p:inputText id="quantidade4"
                        value="#{pesquisaPrevisaoBean.previsaoSelecionada.produto.terceiraQuantidade}" />


                    <p:outputLabel value="segundo Mês:" for="segundoMes" />
                    <p:inputText id="segundoMes"
                        value="#{pesquisaPrevisaoBean.previsaoSelecionada.produto.segundoMesAnterior}" />

                    <p:outputLabel value="Quantidade:" for="quantidade3" />
                    <p:inputText id="quantidade3"
                        value="#{pesquisaPrevisaoBean.previsaoSelecionada.produto.segundaQuantidade}" />

                    <p:outputLabel value="Primeiro mês:" for="primeiroMes" />
                    <p:inputText id="primeiroMes"
                        value="#{pesquisaPrevisaoBean.previsaoSelecionada.produto.primeiroMesAnterior}" />

                    <p:outputLabel value="Quantidade:" for="quantidade1" />
                    <p:inputText id="quantidade1"
                        value="#{pesquisaPrevisaoBean.previsaoSelecionada.produto.primeiraQuantidade}" />




                    <h:outputText value="Previsao:"></h:outputText>

                    <h:inputText
                        value="#{pesquisaPrevisaoBean.previsaoSelecionada.produto.quantidadeRecente}" />


                    <f:facet name="footer">
                        <p:commandButton id="alterar" value="Alterar"
                            update=":frmPesquisa:historicosTable" process="@this"
                            oncomplete="tratarAssociacao(args)"
                            action="#{pesquisaPrevisaoBean.alterarPrevisao}" />
                    </f:facet>
                </p:panelGrid>
            </h:form>
        </p:dialog>



@Named

@Viewscoped public class Searchprevisaobean Serializable Mplements { private Static final long serialVersionUID = 1L;

@Inject
private Historicos previsoes;

@Inject
@UsuarioLogado
private Usuario usuario;

@Inject
private Familias familias;

@Inject
private Linhas linhas;

private Linha linhaSelecionada;

private Familia familiaSelecionada;

private List<Linha> linhasDaEmpresa;

private List<Familia> familiasDaEmpresa;

private List<Historico> listaDePrevisoes;

private Historico previsaoSelecionada;

@Inject
private CadastroHistoricoService cadastroHistoricoService;

private PrevisaoLazyList lazyPrevisoes;

public List<Historico> getPrevisoes() {
    return listaDePrevisoes;
}

public void inicializar() {
    if (FacesUtil.isNotPostback()) {
        lazyPrevisoes = new PrevisaoLazyList(previsoes, linhaSelecionada);
        familiasDaEmpresa = familias.carregaFamilia(usuario.getEmpresa().getCodigo());
        if (this.familiaSelecionada != null) {
            carregarLinhasComFamilia();

        }

    }
}

public void pesquisar() {

    lazyPrevisoes = new PrevisaoLazyList(previsoes, linhaSelecionada);

}

public void carregarLinhasComFamilia() {

    linhasDaEmpresa = linhas.carregaLinhasComFamilia(familiaSelecionada.getCodigo());
}

public void carregarListaHistoricos() {
    listaDePrevisoes = previsoes.carregaHistorico();
}

public void excluir() {
    previsoes.remover(previsaoSelecionada);
    this.listaDePrevisoes.remove(previsaoSelecionada);
    FacesUtil.addInfoMessage("Provisão " + " excluída com sucesso.");
}

public void alterarPrevisao() {

    FacesUtil.addInfoMessage("Previsão " + previsaoSelecionada.getProduto().getDescricao());

    cadastroHistoricoService.salvar(previsaoSelecionada);
}

public void onRowEdit(RowEditEvent event) {

    Historico hist = ((Historico) event.getObject());
    System.out.println(hist.toString());
    //cadastroHistoricoService.salvar(hist);

    FacesMessage msg = new FacesMessage("Produto Edited", ((Historico) event.getObject()).getProduto().getDescricao());
    FacesContext.getCurrentInstance().addMessage(null, msg);
}

public Historico getPrevisaoSelecionada() {
    return previsaoSelecionada;
}

public void setPrevisaoSelecionada(Historico previsaoSelecionada) {
    this.previsaoSelecionada = previsaoSelecionada;
}

public Linha getLinhaSelecionada() {
    return linhaSelecionada;
}

public Familia getFamiliaSelecionada() {
    return familiaSelecionada;
}

public void setLinhaSelecionada(Linha linhaSelecionada) {
    this.linhaSelecionada = linhaSelecionada;
}

public void setFamiliaSelecionada(Familia familiaSelecionada) {
    this.familiaSelecionada = familiaSelecionada;
}

public List<Linha> getLinhasDaEmpresa() {
    return linhasDaEmpresa;
}

public List<Familia> getFamiliasDaEmpresa() {
    return familiasDaEmpresa;
}

public PrevisaoLazyList getLazyModel() {
    return lazyPrevisoes;
}

FOLLOWS THE CODE OF THE SERVICE

public class CadastroHistoricoService implements Serializable {

private static final long serialVersionUID = 1L;

@Inject
private Historicos historicos;

@Transactional
public void salvar(Historico historico) {

    System.out.println(historico.getQuantidade());

    try {
        this.historicos.guardar(historico);
    } catch (OptimisticLockException e) {

        throw new NegocioException(FacesUtil.getMensagemI18n("concorrencia_familia"));

    }

}

}

HISTORICAL CODE

public class Historicos implements Serializable {

private static final long serialVersionUID = 1L;

@Inject
private EntityManager manager;

public Historico porId(Long id) {

    return manager.find(Historico.class, id);

}

@Inject
@UsuarioLogado
private Usuario usuario;

public void guardar(Historico historico) {

    manager.merge(historico);
}
  • What is the content of the class CadastroHistoricoService? And what does that commented code, cadastroHistoricoService.salvar(hist) in the code?

  • I edited putting the service code and the comment was another attempt to save the data using cellEdit, which did not save either.

  • And what’s inside the historical? I’m looking for the location where you use some persistence framework (if any) to save the information to the database.

  • gives a look at the screen that helps most https://snag.gy/HF1pmt.jpg

  • The image still doesn’t provide information to solve your problem, I think your code is the problem (by the way, it’s more business to buy an AMD Ryzen 1700 than an Intel i7 :) )

  • I also put the history code

  • Enable the log in persistence and look at the query you are generating. If you use eclipselink <Property name="eclipselink.logging.level" value="ALL"/> <Property name="eclipselink.logging.Parameters" value="true"/>

  • put her on chat

Show 4 more comments

1 answer

0

The problem is in process of the commandbutton. With @this the only data being submitted is the button itself. Replace with @form.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.