Bom dia a todos,
Estou fazendo um cadastro simples de planos, estou usando primefaces2.2 jsf2 tomcat6 hibernate.
criei um pDialog que localiza os planos em uma pDataTable ele localiza e preenche o form corretamente, o problema é que quando eu tento inserir um novo registro sempre dá um erro no hibernate como se a propriedade não estivesse sendo setada, e verifiquei e realmente ela não está sendo setada, vou colocar os códigos:
PlanoBean
@ManagedBean
@ViewScoped
public class PlanoBean implements java.io.Serializable {
private Usuario usuario;
private Plano plano;
private PlanoDAO planoDAO = new PlanoDAO();
private List<Plano> planos;
private boolean checkMaster;
private String keyword;
private String filter;
public PlanoBean() {
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
HttpSession session = request.getSession();
usuario = (Usuario)session.getAttribute("usuario");
if (usuario.getNivel().equals("MAS")){
checkMaster = true;
}
else {
checkMaster = false;
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Erro:", "Você não possui autorização para acessar este módulo"));
}
plano = new Plano();
planoDAO.clear();
planos = null;
}
public void novo(){
plano = new Plano();
planoDAO.clear();
}
public void salvar(){
FacesContext context = FacesContext.getCurrentInstance();
try {
plano = planoDAO.saveOrUpdate(plano);
context.addMessage(null, new FacesMessage("Infomarção", "Registro salvo com sucesso!"));
}
catch (Exception e){
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Erro:", e.getMessage()));
}
}
public void excluir(){
FacesContext context = FacesContext.getCurrentInstance();
try {
planoDAO.delete(plano);
novo();
context.addMessage(null, new FacesMessage("Infomarção", "Excluído com sucesso!"));
}
catch (Exception e){
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Erro:", e.getMessage()));
}
}
public void searchPlanos(){
planos = null;
planoDAO.clear();
planos = planoDAO.find(keyword, filter);
}
public void onRowSelect(SelectEvent event){
planoDAO.clear();
plano = (Plano)event.getObject();
plano = planoDAO.get(plano.getCodigo());
}
public Plano getPlano() {
return plano;
}
public void setPlano(Plano plano) {
this.plano = plano;
}
public List<Plano> getPlanos() {
return planos;
}
public void setPlanos(List<Plano> planos) {
this.planos = planos;
}
public boolean isCheckMaster() {
return checkMaster;
}
public void setCheckMaster(boolean checkMaster) {
this.checkMaster = checkMaster;
}
public String getFilter() {
return filter;
}
public void setFilter(String filter) {
this.filter = filter;
}
public String getKeyword() {
return keyword;
}
public void setKeyword(String keyword) {
this.keyword = keyword;
}
}
plano.xhtml
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.prime.com.tr/ui"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<p:panel header="Plano" closable="true" id="panelPlano">
<p:messages id="msgs" showDetail="true"/>
<c:if test="#{planoBean.checkMaster}">
<h:form prependId="false">
<p:commandButton value="Novo" image="ui-icon-document" actionListener="#{planoBean.novo}" update="panelPlano"/>
<p:commandButton value="Salvar" image="ui-icon-disk" actionListener="#{planoBean.salvar}" update="panelPlano"/>
<p:commandButton value="Excluir" image="ui-icon-trash" onclick="confirmation.show()"/>
<p:commandButton value="Localizar" image="ui-icon-search" onclick="dlg.show()" update="result"/>
<p:confirmDialog message="Deseja Realmente excluir registro?"
showEffect="bounce" hideEffect="clip"
header="Excluir" severity="alert" widgetVar="confirmation">
<p:commandButton value="Não" onclick="confirmation.hide()" type="button" />
<p:commandButton value="Sim" update="panelPlano" oncomplete="confirmation.hide()"
actionListener="#{planoBean.excluir}" />
</p:confirmDialog>
</h:form>
<h:form prependId="false">
<h:panelGrid columns="3">
<h:outputLabel value="Código:"/>
<h:outputLabel value="Descrição:"/>
<h:outputLabel value="Plano com seguro:"/>
<p:inputText id="codigo" size="10" value="#{planoBean.plano.codigo}" disabled="true"/>
<p:inputText id="descricao" size="40" style="text-transform:uppercase" value="#{planoBean.plano.descricao}" required="true" requiredMessage="Digite a Descrição">
<f:converter converterId="plafama.util.UppercaseConverter"/>
</p:inputText>
<h:selectBooleanCheckbox id="seguro" value="#{planoBean.plano.seguro}"/>
</h:panelGrid>
</h:form>
<p:dialog header="Localizar..." widgetVar="dlg" resizable="false" width="900" height="350" showEffect="clip" hideEffect="clip">
<h:form prependId="false">
<h:panelGrid columns="3">
<h:outputLabel value="Consultar por:"/>
<h:outputLabel value="Filtro"/>
<h:outputLabel value=""/>
<p:inputText id="keyword" size="60" style="text-transform:uppercase" value="#{planoBean.keyword}" autocomplete="false">
<f:converter converterId="plafama.util.UppercaseConverter"/>
</p:inputText>
<h:selectOneMenu id="filter" value="#{planoBean.filter}">
<f:selectItem itemLabel="Descrição" itemValue="descricao"/>
<f:selectItem itemLabel="Código" itemValue="codigo"/>
</h:selectOneMenu>
<p:commandButton value="Buscar" image="ui-icon ui-icon-search" update="result" actionListener="#{planoBean.searchPlanos}" ajax="true"/>
</h:panelGrid>
<p:dataTable id="result" var="plan" value="#{planoBean.planos}" selection="#{planoBean.plano}" rowSelectListener="#{planoBean.onRowSelect}" onRowSelectComplete="dlg.hide();" selectionMode="single" update="panelPlano" emptyMessage="Nenhum registro encontrado">
<p:column>
<f:facet name="header">Código</f:facet>
#{plan.codigo}
</p:column>
<p:column>
<f:facet name="header">Descrição</f:facet>
#{plan.descricao}
</p:column>
<p:column>
<f:facet name="header">Seguro:</f:facet>
#{plan.seguroFormatado}
</p:column>
</p:dataTable>
</h:form>
</p:dialog>
</c:if>
</p:panel>
</ui:composition>
Quando salvo um registro já existente no banco de dados funciona perfeitamente
Quando salvo novo registro acontece a mensagem de exceção:
* not-null property references a null or transient value: plafama.model.Plano.descricao
Alguém já passou por isso, existe alguma solução? onde estou errando?