estou trabalhando com jpa e estou com alguns problemas, não consigo entender o por que desse erro, os beans são gerado de uma classe do banco da dados e quando eu faço alguns testes em JSP e ele me retorna os seguintes erros.
[size=18]javax.servlet.ServletException: Error testing property ‘diasemana’ in bean of type null
javax.faces.webapp.FacesServlet.service(FacesServlet.java:209) [/size]
[quote=ruilima]estou trabalhando com jpa e estou com alguns problemas, não consigo entender o por que desse erro, os beans são gerado de uma classe do banco da dados e quando eu faço alguns testes em JSP e ele me retorna os seguintes erros.
[size=18]javax.servlet.ServletException: Error testing property ‘diasemana’ in bean of type null
javax.faces.webapp.FacesServlet.service(FacesServlet.java:209) [/size][/quote]
@author Rui Lima
*/ @Entity @Table(name = “public.agchefe”) @NamedQueries( { @NamedQuery(name = “Agchefe.findById”, query = “SELECT a FROM Agchefe a WHERE a.id = :id”), @NamedQuery(name = “Agchefe.findByData”, query = “SELECT a FROM Agchefe a WHERE a.data = :data”), @NamedQuery(name = “Agchefe.findByDiasemana”, query = “SELECT a FROM Agchefe a WHERE a.diasemana = :diasemana”), @NamedQuery(name = “Agchefe.findByDescricao”, query = “SELECT a FROM Agchefe a WHERE a.descricao = :descricao”)
})
public class Agchefe implements Serializable {
/** Creates a new instance of Agchefe */
public Agchefe() {
}
/**
Cria uma nova instância de Agchefe com os valores especificados.
@param id o id do Agchefe
*/
public Agchefe(Integer id) {
this.id = id;
}
/**
Define o id deste Agchefe.
@return o id
*/
public Integer getId() {
return this.id;
}
/**
Define o id deste Agchefe para o valor especificado.
@param id o novo id
*/
public void setId(Integer id) {
this.id = id;
}
/**
Define o data deste Agchefe.
@return o data
*/
public Date getData() {
return this.data;
}
/**
Define o data deste Agchefe para o valor especificado.
@param data o novo data
*/
public void setData(Date data) {
this.data = data;
}
/**
Define o diasemana deste Agchefe.
@return o diasemana
*/
public String getDiasemana() {
return this.diasemana;
}
/**
Define o diasemana deste Agchefe para o valor especificado.
@param diasemana o novo diasemana
*/
public void setDiasemana(String diasemana) {
this.diasemana = diasemana;
}
/**
Define o descricao deste Agchefe.
@return o descricao
*/
public String getDescricao() {
return this.descricao;
}
/**
Define o descricao deste Agchefe para o valor especificado.
@param descricao o novo descricao
*/
public void setDescricao(String descricao) {
this.descricao = descricao;
}
/**
Retorna um valor de código hash para o objeto. Esta implementação computa
um valor de código hash baseado nos campos id deste objeto.
@return um valor de código hash para este objeto.
*/ @Override
public int hashCode() {
int hash = 0;
hash += (this.id != null ? this.id.hashCode() : 0);
return hash;
}
/**
Determina se outro objeto é igual a este Agchefe. O resultado é
true se e somente se o argumento não for nulo e for um objeto Agchefe o qual
tem o mesmo valor para o campo id como este objeto.
@param object o objeto de referência com o qual comparar
@returntrue se este objeto é o mesmo como o argumento;
false caso contrário.
*/ @Override
public boolean equals(Object object) {
// TODO: Warning - this method won’t work in the case the id fields are not set
if (!(object instanceof Agchefe)) {
return false;
}
Agchefe other = (Agchefe)object;
if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) return false;
return true;
}
/**
Retorna uma representação literal deste objeto. Esta implementação cria
uma representação baseada nos campos id.
@return uma representação literal deste objeto.
*/ @Override
public String toString() {
return “casacivil.pa.gov.sitio.entidades.Agchefe[id=” + id + “]”;
}
}
Minha classe controler
public class AgchefeController {
/** Creates a new instance of AgchefeController */
public AgchefeController() {
emf = Persistence.createEntityManagerFactory("casacivilAdminPU");
}
private Agchefe agchefe;
private DataModel model;
private EntityManagerFactory emf;
private EntityManager getEntityManager() {
return emf.createEntityManager();
}
private int batchSize = 20;
private int firstItem = 0;
public Agchefe getAgchefe() {
return agchefe;
}
public void setAgchefe(Agchefe agchefe) {
this.agchefe = agchefe;
}
public DataModel getDetailAgchefes() {
return model;
}
public void setDetailAgchefes(Collection<Agchefe> m) {
model = new ListDataModel(new ArrayList(m));
}
public String createSetup() {
this.agchefe = new Agchefe();
return "agchefe_create";
}
public String create() {
EntityManager em = getEntityManager();
try {
em.getTransaction().begin();
em.persist(agchefe);
em.getTransaction().commit();
addSuccessMessage("Agchefe was successfully created.");
} catch (Exception ex) {
try {
addErrorMessage(ex.getLocalizedMessage());
em.getTransaction().rollback();
} catch (Exception e) {
addErrorMessage(e.getLocalizedMessage());
}
} finally {
em.close();
}
return "agchefe_list";
}
public String detailSetup() {
setAgchefeFromRequestParam();
return "agchefe_detail";
}
public String editSetup() {
setAgchefeFromRequestParam();
return "agchefe_edit";
}
public String edit() {
EntityManager em = getEntityManager();
try {
em.getTransaction().begin();
agchefe = em.merge(agchefe);
em.getTransaction().commit();
addSuccessMessage("Agchefe was successfully updated.");
} catch (Exception ex) {
try {
addErrorMessage(ex.getLocalizedMessage());
em.getTransaction().rollback();
} catch (Exception e) {
addErrorMessage(e.getLocalizedMessage());
}
} finally {
em.close();
}
return "agchefe_list";
}
public String destroy() {
EntityManager em = getEntityManager();
try {
em.getTransaction().begin();
Agchefe agchefe = getAgchefeFromRequestParam();
agchefe = em.merge(agchefe);
em.remove(agchefe);
em.getTransaction().commit();
addSuccessMessage("Agchefe was successfully deleted.");
} catch (Exception ex) {
try {
addErrorMessage(ex.getLocalizedMessage());
em.getTransaction().rollback();
} catch (Exception e) {
addErrorMessage(e.getLocalizedMessage());
}
} finally {
em.close();
}
return "agchefe_list";
}
public Agchefe getAgchefeFromRequestParam() {
EntityManager em = getEntityManager();
try{
Agchefe o = (Agchefe) model.getRowData();
o = em.merge(o);
return o;
} finally {
em.close();
}
}
public void setAgchefeFromRequestParam() {
Agchefe agchefe = getAgchefeFromRequestParam();
setAgchefe(agchefe);
}
public DataModel getAgchefes() {
EntityManager em = getEntityManager();
try{
Query q = em.createQuery("select object(o) from Agchefe as o");
q.setMaxResults(batchSize);
q.setFirstResult(firstItem);
model = new ListDataModel(q.getResultList());
return model;
} finally {
em.close();
}
}
public static void addErrorMessage(String msg) {
FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, msg);
FacesContext fc = FacesContext.getCurrentInstance();
fc.addMessage(null, facesMsg);
}
public static void addSuccessMessage(String msg) {
FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, msg, msg);
FacesContext fc = FacesContext.getCurrentInstance();
fc.addMessage("successInfo", facesMsg);
}
public Agchefe findAgchefe(Integer id) {
EntityManager em = getEntityManager();
try{
Agchefe o = (Agchefe) em.find(Agchefe.class, id);
return o;
} finally {
em.close();
}
}
public int getItemCount() {
EntityManager em = getEntityManager();
try{
int count = ((Long) em.createQuery("select count(o) from Agchefe as o").getSingleResult()).intValue();
return count;
} finally {
em.close();
}
}
public int getFirstItem() {
return firstItem;
}
public int getLastItem() {
int size = getItemCount();
return firstItem + batchSize > size ? size : firstItem + batchSize;
}
public int getBatchSize() {
return batchSize;
}
public String next() {
if (firstItem + batchSize < getItemCount()) {
firstItem += batchSize;
}
return "agchefe_list";
}
public String prev() {
firstItem -= batchSize;
if (firstItem < 0) {
firstItem = 0;
}
return "agchefe_list";
}
Não ajudou muita coisa , mas interpretando o código fonte me parece que você não está passando o dia da semana , e está dando erro quando o JPA vai validar as suas consultas na namedQuery.
pois é, creio que não seria isso do NamedQuery, pois estou passando @NamedQuery(name = “Agchefe.findByDiasemana”, query = “SELECT a FROM Agchefe a WHERE a.diasemana = :diasemana”),
deixa eu te explicar, é que essa classe bean e a jsp foram geradas a partir do banco de dados. Pois tanto nas classes quanto na no banco dados o atributo não esta definido como null, então no momento em que executo a aplicação ela roda normalmente é quando passo os parametros inserindo diretamente no jsp (que é um JSF) ele me retorna esse erro javax.servlet.ServletException: Error testing property ‘diasemana’ in bean of type null
javax.faces.webapp.FacesServlet.service(FacesServlet.java:209).
Não sei se vc teve algum tipo de problema referente a isso!!!
pois é, creio que não seria isso do NamedQuery, pois estou passando @NamedQuery(name = “Agchefe.findByDiasemana”, query = “SELECT a FROM Agchefe a WHERE a.diasemana = :diasemana”),
deixa eu te explicar, é que essa classe bean e a jsp foram geradas a partir do banco de dados. Pois tanto nas classes quanto na no banco dados o atributo não esta definido como null, então no momento em que executo a aplicação ela roda normalmente é quando passo os parametros inserindo diretamente no jsp (que é um JSF) ele me retorna esse erro javax.servlet.ServletException: Error testing property ‘diasemana’ in bean of type null
javax.faces.webapp.FacesServlet.service(FacesServlet.java:209).
Não sei se vc teve algum tipo de problema referente a isso!!!
pois é, creio que não seria isso do NamedQuery, pois estou passando @NamedQuery(name = “Agchefe.findByDiasemana”, query = “SELECT a FROM Agchefe a WHERE a.diasemana = :diasemana”),
deixa eu te explicar, é que essa classe bean e a jsp foram geradas a partir do banco de dados. Pois tanto nas classes quanto na no banco dados o atributo não esta definido como null, então no momento em que executo a aplicação ela roda normalmente é quando passo os parametros inserindo diretamente no jsp (que é um JSF) ele me retorna esse erro javax.servlet.ServletException: Error testing property ‘diasemana’ in bean of type null
javax.faces.webapp.FacesServlet.service(FacesServlet.java:209).
Não sei se vc teve algum tipo de problema referente a isso!!!
pois é, creio que não seria isso do NamedQuery, pois estou passando @NamedQuery(name = “Agchefe.findByDiasemana”, query = “SELECT a FROM Agchefe a WHERE a.diasemana = :diasemana”),
deixa eu te explicar, é que essa classe bean e a jsp foram geradas a partir do banco de dados. Pois tanto nas classes quanto na no banco dados o atributo não esta definido como null, então no momento em que executo a aplicação ela roda normalmente é quando passo os parametros inserindo diretamente no jsp (que é um JSF) ele me retorna esse erro javax.servlet.ServletException: Error testing property ‘diasemana’ in bean of type null
javax.faces.webapp.FacesServlet.service(FacesServlet.java:209).
Não sei se vc teve algum tipo de problema referente a isso!!!