I have a list where I want to select the item change a field from the product table and save it to the bank via a dialog. Knowing that a product has several histories, ie the relationship is from OneToMany. The item is not being changed. Is there any problem in submitting the item from a history list and changing the product field saving the history?
Here is the xhtml code for 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 dialog xhtml code: '
<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 SearchPreviewBean implements Serializable { 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;
}
FOLLOW THE SERVICE CODE
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"));
}
}
}
CODE OF HISTORICS
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);
}