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?– Dherik
I edited putting the service code and the comment was another attempt to save the data using cellEdit, which did not save either.
– user2509556
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.
– Dherik
gives a look at the screen that helps most https://snag.gy/HF1pmt.jpg
– user2509556
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 :) )
– Dherik
I also put the history code
– user2509556
Let’s go continue this discussion in chat.
– Dherik
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"/>
– ulima69
put her on chat
– user2509556