então!
me bati tanto que acabei revertendo tudo que tinha feito e partido pra outra opção!
mais o que acontence é o seguinte…
Minha aplicação está toda com SessionScoped e pretendo mudar tudo para ViewScoped
Meu banco é o PostGree
meu código tava mais o menos assim…
O list
<p:panel header="CADASTRO DE SÉRIE" >
<h:form id="form">
<h:inputText value="#{serieMB.descricao}" />
<p:commandButton value="Consultar" async="true" update="table" action="#{serieMB.consultar}" styleClass="botoes"/>
<p:ajaxStatus onstart="statusDialog.show();" onsuccess="statusDialog.hide();"/>
<p:dialog modal="true" header="Efetuando Consulta" widgetVar="statusDialog" draggable="false" closable="false" width="450">
<h:graphicImage value="../Imagens/ajaxloading.gif" />
</p:dialog>
<p:commandButton value="Novo" action="#{serieMB.novo}" ajax="false" style="float: right; margin-top: -45px;"/>
<p:dataTable id="table" value="#{serieMB.series}" var="c" paginator="true" rows="20" emptyMessage="Nenhum registro encontrado." >
<p:column>
<f:facet name="header" >
<h:outputText value="SÉRIE"/>
</f:facet>
<h:outputText value="#{c.cSerie}" />
</p:column>
<p:column >
<f:facet name="header" >
<h:outputText value="DESCRIÇÃO" />
</f:facet>
<h:outputText value="#{c.xSerie}" />
</p:column>
<p:column styleClass="acaoColuna">
<f:facet name="header" >
<h:outputText value="AÇÃO" />
</f:facet>
<p:commandButton action="SerieForm?faces-redirect=true&includeViewParams=true" value="EDITAR" ajax="false" styleClass="botoes">
<f:setPropertyActionListener value="#{c}" target="#{serieMB.serie}" />
</p:commandButton>
<p:commandButton value="EXCLUIR" onclick="confirmation.show()" styleClass="botoes">
<f:setPropertyActionListener value="#{c}" target="#{serieMB.serie}" />
</p:commandButton>
<p:confirmDialog message="Deseja realmente excluir este registro?" hideEffect="explode" header="Aviso" severity="alert" widgetVar="confirmation">
<p:commandButton value="Sim" oncomplete="confirmation.hide()" action="#{serieMB.excluir}" update="table" ajax="false" />
<p:commandButton value="Não" onclick="confirmation.hide()" type="button" />
</p:confirmDialog>
</p:column>
</p:dataTable>
</h:form>
O Form
<h:form id="form">
<p:message for="serie" />
<p:panel header="CADASTRO DE SÉRIE">
<h:panelGrid id="serie" columns="3" cellpadding="5" cellspacing="3" dir="LTR" >
<h:outputLabel value="ULTIMA ATUALIZAÇÃO:"/>
<h:outputLabel value="#{serieMB.serie.versao}" id="versao" converter="dataAtualizacaoConverter"/>
<h:outputText/>
<h:outputLabel value="SÉRIE:"/>
<h:inputText value="#{serieMB.serie.cSerie}" id="cSerie" maxlength="3" size="5">
<f:validateLength minimum="1" maximum="3"/>
</h:inputText>
<p:message for="cSerie" />
<h:outputLabel value="DESCRIÇÃO:"/>
<h:inputText value="#{serieMB.serie.xSerie}" id="xSerie" maxlength="60" size="60">
<f:validateLength minimum="1" maximum="60" />
</h:inputText>
<p:message for="xSerie" />
<h:outputText />
<h:panelGroup>
<p:commandButton value="Salvar" style=" margin-right: 10px;" action="#{serieMB.salvar}" ajax="false" />
<p:commandButton value="Limpar" style=" margin-right: 10px;" type="reset" />
<p:button outcome="serieList" value="Cancelar" style="margin-left: 10px;"/>
</h:panelGroup>
</h:panelGrid>
</p:panel>
</h:form>
Tem o Converter
@FacesConverter(forClass= Serie.class)
public class SerieConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String string) {
System.out.println("SerieConverter.getAsObject(): " + string);
if(string == null || string.isEmpty()){
return null;
}
SerieDao sdao = new SerieDaoImpl();
return sdao.getById(Long.valueOf(string));
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object object) {
Serie serie = (Serie) object;
System.out.println("SerieConverter.getAsString(): " + serie);
if(serie == null || serie.getIdSerie() == null){
return null;
}
return String.valueOf(serie.getIdSerie());
}
}
A entidade
@Entity
@Table(name = "SERIE")
public class Serie implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "IDSERIE")
private Long idSerie;
@Column(name = "CSERIE", length= 3)
private String cSerie;
@Column(name = "XSERIE", length= 60)
private String xSerie;
@Version
@Column(name = "VERSAO")
private Timestamp versao;
}
//getters e setters omitidos
e o ManageBean
@ManagedBean
@ViewScoped
public class SerieMB implements Serializable {
private Serie serie;
private List<Serie> series;
private String numero;
private String descricao;
// getters e setters omitidos
/** Creates a new instance of SerieMB */
public SerieMB() {
}
@PostConstruct
public void init(){
atribuirEstadoInicial();
}
public void atribuirEstadoInicial(){
serie = Serie();
series = null
}
public String novo() {
atribuirEstadoInicial()
numero = null;
descricao = null;
return "/cadastros/serieForm.nfe";
}
public void salvar() {
SerieDao dao = new SerieDaoImpl();
try {
dao.save(serie);
atribuirEstadoInicial()
numero = null;
descricao = null;
FacesContext.getCurrentInstance().getExternalContext().redirect("serieList.nfe");
} catch (StaleObjectStateException sose) {
JSFUtil.getInstance().mensagemErro("form:serie", "Erro ao tentar salvar o registro." + sose.getMessage());
} catch (IOException io) {
JSFUtil.getInstance().mensagemErro(null, String.valueOf(io.getCause()));
}
}
public void consultar() {
atribuirEstadoInicial()
SerieDao dao = new SerieDaoImpl();
series = dao.consulta(numero, descricao);
}
public void excluir() {
SerieDao dao = new SerieDaoImpl();
dao.delete(serie);
atribuirEstadoInicial()
}
}
O código tava bem parecido com isso,
da uma olhada ai,
Eu não entendo muito de cachê mais pela forma como os dados estavam sendo apresentados creio eu que tenha algo a ver com isso…