Novo registro não é mostrado no datatable
Pessoal, estou trabalhando com JSF, Hibernate e Spring, em um form de cadastro, quando salvo um novo registro o usuario é direcionado para uma outra página onde são visualizados todos os registros em um datable, onde esse q foi inserido não é visualizado, a linha no datatable referente ao registro é mostrada, mas os dados não. Os dados a serem mostrados são de relacionamentos, quando coloco um terceiro campo no datatable q não tem relacionamento, é mostrado.
codigo xhtml:
[CODE[
<rich:dataTable id="local" value="#{profissionalcargohonorificoController.todos}" var="item" rows="15" onRowMouseOver="this.style.backgroundColor='#F1F1F1'" onRowMouseOut="this.style.backgroundColor='#FFFFFF'" rendered="#{not empty profissionalcargohonorificoController.todos}">
<h:column>
<f:facet name="header">
<h:outputText value="Profissional" />
</f:facet>
<h:outputText value="#{item.id.profissional.nome}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Cargo Honorífico" />
</f:facet>
<h:outputText value="#{item.id.cargohonorifico.descricao}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Data de Término" />
</f:facet>
<h:outputText value="#{item.datatermino}" />
</h:column>
<h:column>
<a4j:commandLink action="#{profissionalcargohonorificoController.editar}" reRender="local">
<h:graphicImage value="/imagens/site/edit.gif"
style="border: none; left: 35%; position: relative;" alt="Alterar" />
</a4j:commandLink>
<f:facet name="header">
<h:outputText value="Atualizar" />
</f:facet>
</h:column>
<h:column>
<a4j:commandLink action="#{profissionalcargohonorificoController.excluir}" reRender="local"
onclick="if (!confirm('Deseja excluir este registro?')) return false;">
<h:graphicImage value="/imagens/site/delete.gif"
style="border: none;left: 27%; position: relative;" alt="Excluir" />
</a4j:commandLink>
<f:facet name="header">
<h:outputText value="Excluir" />
</f:facet>
</h:column>
<f:facet name="footer">
<rich:datascroller/>
</f:facet>
</rich:dataTable><br />
[/CODE]
codigo xhtml:
[CODE[
<rich:dataTable id="local" value="#{profissionalcargohonorificoController.todos}" var="item" rows="15" onRowMouseOver="this.style.backgroundColor='#F1F1F1'" onRowMouseOut="this.style.backgroundColor='#FFFFFF'" rendered="#{not empty profissionalcargohonorificoController.todos}">
<h:column>
<f:facet name="header">
<h:outputText value="Profissional" />
</f:facet>
<h:outputText value="#{item.id.profissional.nome}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Cargo Honorífico" />
</f:facet>
<h:outputText value="#{item.id.cargohonorifico.descricao}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Data de Término" />
</f:facet>
<h:outputText value="#{item.datatermino}" />
</h:column>
<h:column>
<a4j:commandLink action="#{profissionalcargohonorificoController.editar}" reRender="local">
<h:graphicImage value="/imagens/site/edit.gif"
style="border: none; left: 35%; position: relative;" alt="Alterar" />
</a4j:commandLink>
<f:facet name="header">
<h:outputText value="Atualizar" />
</f:facet>
</h:column>
<h:column>
<a4j:commandLink action="#{profissionalcargohonorificoController.excluir}" reRender="local"
onclick="if (!confirm('Deseja excluir este registro?')) return false;">
<h:graphicImage value="/imagens/site/delete.gif"
style="border: none;left: 27%; position: relative;" alt="Excluir" />
</a4j:commandLink>
<f:facet name="header">
<h:outputText value="Excluir" />
</f:facet>
</h:column>
<f:facet name="footer">
<rich:datascroller/>
</f:facet>
</rich:dataTable><br />
[/CODE]
José Filho
Curtidas 0
Respostas
José Filho
14/05/2010
Não sei o q aconteceu:
O fórum deveria ter como editar as mensagens.
codigo xhtml:
O fórum deveria ter como editar as mensagens.
codigo xhtml:
<rich:dataTable id="local" value="#{profissionalcargohonorificoController.todos}" var="item" rows="15" onRowMouseOver="this.style.backgroundColor='#F1F1F1'" onRowMouseOut="this.style.backgroundColor='#FFFFFF'" rendered="#{not empty profissionalcargohonorificoController.todos}">
<h:column>
<f:facet name="header">
<h:outputText value="Profissional" />
</f:facet>
<h:outputText value="#{item.id.profissional.nome}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Cargo Honorífico" />
</f:facet>
<h:outputText value="#{item.id.cargohonorifico.descricao}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Data de Término" />
</f:facet>
<h:outputText value="#{item.datatermino}" />
</h:column>
<h:column>
<a4j:commandLink action="#{profissionalcargohonorificoController.editar}" reRender="local">
<h:graphicImage value="/imagens/site/edit.gif"
style="border: none; left: 35%; position: relative;" alt="Alterar" />
</a4j:commandLink>
<f:facet name="header">
<h:outputText value="Atualizar" />
</f:facet>
</h:column>
<h:column>
<a4j:commandLink action="#{profissionalcargohonorificoController.excluir}" reRender="local"
onclick="if (!confirm('Deseja excluir este registro?')) return false;">
<h:graphicImage value="/imagens/site/delete.gif"
style="border: none;left: 27%; position: relative;" alt="Excluir" />
</a4j:commandLink>
<f:facet name="header">
<h:outputText value="Excluir" />
</f:facet>
</h:column>
<f:facet name="footer">
<rich:datascroller/>
</f:facet>
</rich:dataTable><br />
GOSTEI 0
Dyego Carmo
14/05/2010
Preciso do codigo do DAO e do Cotnrolador para melhor entender o que está acontecendo.
GOSTEI 0
José Filho
14/05/2010
Controller:
Dao
@Controller("profissionalcargohonorificoController")
@Scope("session")
public class ProfissionalcargohonorificoController {
private Profissionalcargohonorifico profissionalcargohonorifico;
private DataModel model;
private int ordem = 4;
public Profissionalcargohonorifico getProfissionalcargohonorifico() {
return profissionalcargohonorifico;
}
public void setProfissionalcargohonorifico(
Profissionalcargohonorifico profissionalcargohonorifico) {
this.profissionalcargohonorifico = profissionalcargohonorifico;
}
public DataModel getModel() {
return model;
}
public void setModel(DataModel model) {
this.model = model;
}
public int getOrdem() {
return ordem;
}
public void setOrdem(int ordem) {
this.ordem = ordem;
}
public DaoGenerico<Profissionalcargohonorifico, String> getProfissionalcargohonorificoDao() {
return profissionalcargohonorificoDao;
}
public void setLocaltrabalhoDao(
DaoGenerico<Profissionalcargohonorifico, String> profissionalcargohonorificoDao) {
this.profissionalcargohonorificoDao = profissionalcargohonorificoDao;
}
@Resource
private DaoGenerico<Profissional, String> profissionalDao;
@Resource
private DaoGenerico<Profissionalcargohonorifico, String> profissionalcargohonorificoDao;
@Resource
private DaoGenerico<Cargohonorifico, Long> cargohonorificoDao;
@Resource
private DaoGenerico<Camara, Long> camaraDao;
@Resource
private DaoGenerico<Entidadeclasse, String> entidadeclasseDao;
public DaoGenerico<Cargohonorifico, Long> getCargohonorificoDao() {
return cargohonorificoDao;
}
public void setCargohonorificoDao(
DaoGenerico<Cargohonorifico, Long> cargohonorificoDao) {
this.cargohonorificoDao = cargohonorificoDao;
}
public DaoGenerico<Camara, Long> getCamaraDao() {
return camaraDao;
}
public void setCamaraDao(DaoGenerico<Camara, Long> camaraDao) {
this.camaraDao = camaraDao;
}
public DaoGenerico<Entidadeclasse, String> getEntidadeclasseDao() {
return entidadeclasseDao;
}
public void setEntidadeclasseDao(
DaoGenerico<Entidadeclasse, String> entidadeclasseDao) {
this.entidadeclasseDao = entidadeclasseDao;
}
private Map<String, Object> cargohonorificoItem = null;
private Map<String, Object> camaraItem = null;
private Map<String, Object> entidadeClasseItem = null;
public Map<String, Object> getCargohonorifico() {
cargohonorificoItem = new LinkedHashMap<String, Object>();
for (Iterator<?> iter = cargohonorificoDao.todos(2).iterator(); iter
.hasNext();) {
Cargohonorifico c = (Cargohonorifico) iter.next();
cargohonorificoItem.put(c.getDescricao(), c.getIdcargohonorifico());// label,value
}
return cargohonorificoItem;
}
public Map<String, Object> getCamara() {
camaraItem = new LinkedHashMap<String, Object>();
for (Iterator<?> iter = camaraDao.todos(2).iterator(); iter.hasNext();) {
Camara c = (Camara) iter.next();
camaraItem.put(c.getDescricao(), c.getIdcamara());// label,value
}
return camaraItem;
}
public Map<String, Object> getEntidadeclasse() {
entidadeClasseItem = new LinkedHashMap<String, Object>();
for (Iterator<?> iter = entidadeclasseDao.todos(2).iterator(); iter
.hasNext();) {
Entidadeclasse e = (Entidadeclasse) iter.next();
entidadeClasseItem.put(e.getSigla(), e.getIdentidadeclasse());// label,value
}
return entidadeClasseItem;
}
public DaoGenerico<Profissional, String> getProfissionalDao() {
return profissionalDao;
}
public void setProfissionalDao(
DaoGenerico<Profissional, String> profissionalDao) {
this.profissionalDao = profissionalDao;
}
public void setProfissionalcargohonorificoDao(
DaoGenerico<Profissionalcargohonorifico, String> profissionalcargohonorificoDao) {
this.profissionalcargohonorificoDao = profissionalcargohonorificoDao;
}
public ProfissionalcargohonorificoController() {
}
public String novo() {
this.profissionalcargohonorifico = new Profissionalcargohonorifico();
this.profissionalcargohonorifico
.setId(new ProfissionalcargohonorificoId());
this.profissionalcargohonorifico.getId().setCargohonorifico(
new Cargohonorifico());
getCargohonorifico();
this.profissionalcargohonorifico.getId().setProfissional(
new Profissional());
this.profissionalcargohonorifico.setRnpsuplente(new Profissional());
this.profissionalcargohonorifico.setCamara(new Camara());
getCamara();
this.profissionalcargohonorifico
.setEntidadeclasse(new Entidadeclasse());
getEntidadeclasse();
return "formProfissionalCargoHonorifico";
}
public DataModel getTodos() {
return model = new ListDataModel(profissionalcargohonorificoDao
.todos(ordem));
}
public Profissionalcargohonorifico getProfissionalcargohonorificoParaEditarExcluir() {
Profissionalcargohonorifico profissionalcargohonorifico = (Profissionalcargohonorifico) model
.getRowData();
return profissionalcargohonorifico;
}
public String editar() {
novoregistro = false;
renderizar();
FacesContext context = FacesContext.getCurrentInstance();
Profissionalcargohonorifico pch = (Profissionalcargohonorifico) context
.getExternalContext().getRequestMap().get("item");
setProfissionalcargohonorifico(pch);
return "formProfissionalCargoHonorifico";
}
public String salvar() {
if ((profissionalcargohonorifico.getRnpsuplente().getCodigo() == null)
|| (profissionalcargohonorifico.getRnpsuplente().getCodigo()
.equals(""))) {
profissionalcargohonorifico.setRnpsuplente(profissionalDao.pesquisarPorId(""));
} else {
profissionalcargohonorifico.getRnpsuplente().setCodigo(
profissionalcargohonorifico.getRnpsuplente().getCodigo());
}
try {
if (novoregistro == true) {
profissionalcargohonorificoDao
.salvar(profissionalcargohonorifico);
} else {
profissionalcargohonorificoDao
.atualizar(profissionalcargohonorifico);
}
} catch (JpaSystemException e) {
registroSalvo = false;
FacesContext.getCurrentInstance().addMessage(
"form1",
new FacesMessage(FacesMessage.SEVERITY_ERROR,
"Registro já Existe", "Registro já Existe"));
return null;
}
return "sucesso";
}
public String excluir() {
FacesContext context = FacesContext.getCurrentInstance();
Profissionalcargohonorifico pch = (Profissionalcargohonorifico) context
.getExternalContext().getRequestMap().get("item");
profissionalcargohonorificoDao.excluir(pch);
return null;
}
public void validaProfissional(FacesContext context,
UIComponent componente, Object objeto) throws ValidatorException {
String codigo = (String) objeto;
if (profissionalcargohonorifico.getId().getProfissional().getCodigo() != "") {
if (profissionalDao.pesquisarPorId(codigo) == null) {
((UIInput) componente).setValid(false);
FacesMessage message = new FacesMessage(
"Profissional não Encontrado.");
context.addMessage(componente.getClientId(context), message);
}
}
}
public String getExisteProfissional() {
if (profissionalcargohonorifico.getId().getProfissional().getCodigo() != null) {
Profissional prof = profissionalDao
.pesquisarPorId(profissionalcargohonorifico.getId()
.getProfissional().getCodigo());
if (prof != null) {
return prof.getNome();
} else {
return null;
}
}
return null;
}
public String getExisteSuplente() {
if (profissionalcargohonorifico.getRnpsuplente().getCodigo() != null) {
Profissional prof = profissionalDao.pesquisarPorId(profissionalcargohonorifico.getRnpsuplente().getCodigo());
if (prof != null) {
return prof.getNome();
} else {
return null;
}
}
return null;
}
}
Dao
@Transactional(readOnly=true,propagation=Propagation.REQUIRED)
public class DaoGenericoImp<T,ID extends Serializable> implements DaoGenerico<T, ID> {
private EntityManager entityManager;
private final Class<T> oClass;
@SuppressWarnings("unchecked")
public DaoGenericoImp(){
this.oClass = (Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
@Override
@Transactional(readOnly=false,propagation=Propagation.REQUIRED)
public T atualizar(T object) {
//getEntityManager().merge(object);
getEntityManager().merge(object);
return object;
}
@Override
@Transactional(readOnly=false,propagation=Propagation.REQUIRED)
public void excluir(T object) {
object = getEntityManager().merge(object);
getEntityManager().remove(object);
}
@Override
public Class<T> getObjectClass() {
return this.oClass;
}
@SuppressWarnings("unchecked")
@Override
public List<T> listPesq(String query) {
Query q = getEntityManager().createQuery(query);
return q.getResultList();
}
@SuppressWarnings("unchecked")
@Override
public List<T> listPesqParam(String query, Map<String, Object> params) {
Query q = getEntityManager().createQuery(query);
for(String chave:params.keySet()){
q.setParameter(chave, params.get(chave));
}
return q.getResultList();
}
@SuppressWarnings("unchecked")
@Override
public List<T> listPesqParam(String query, Map<String, Object> params,
int maximo, int atual) {
Query q = getEntityManager().createQuery(query).setMaxResults(maximo).setFirstResult(atual);
for(String chave:params.keySet()){
q.setParameter(chave, params.get(chave));
}
return q.getResultList();
}
@SuppressWarnings("unchecked")
@Override
public T pesqParam(String query, Map<String, Object> params) {
Query q = getEntityManager().createQuery(query);
for(String chave : params.keySet()){
q.setParameter(chave, params.get(chave));
}
try{
return (T)q.getSingleResult();
}catch(NoResultException nre){
return null;
}
}
@Override
public T pesquisarPorId(ID id) {
return (T)getEntityManager().find(oClass, id);
}
@Override
@Transactional(readOnly=false,propagation=Propagation.REQUIRED)
public T salvar(T object){
getEntityManager().clear();
getEntityManager().persist(object);
return object;
}
@SuppressWarnings("unchecked")
@Override
public List<T> todos(int ordem) {
String queryS = "SELECT obj FROM "+oClass.getSimpleName()+" obj ORDER BY "+ordem;
Query query = getEntityManager().createQuery(queryS);
return query.getResultList();
}
@PersistenceContext
public void setEntityManager(EntityManager em) {
this.entityManager = em;
}
public EntityManager getEntityManager() {
if (entityManager == null)
throw new IllegalStateException("Erro");
return entityManager;
}
}
GOSTEI 0
Dyego Carmo
14/05/2010
O novo registro chega a ser exibido se voce fechar o browser e abrir novamente ?
GOSTEI 0
José Filho
14/05/2010
Sim, num precisa nem fechar, é só clicar num link do menu pra ele chamar novamente a página
GOSTEI 0
Dyego Carmo
14/05/2010
Logo apos chamar o .remove do EntityManger voce deve FECHA-LO... com .close... só depois de fecha-lo ele vai apagar realmente o registro...
Teste e me avise !
Teste e me avise !
GOSTEI 0
José Filho
14/05/2010
Dyego, acho q vc não entendeu o problema, não tem nada haver com o excluir, é questão de visualização, vou explicar novamente:
Sempre q salvo um registro, é exibido um form com um rich:datatable, com todos os dados já cadastrados, mas, o registro q acabei de inserir não é mostrado; esse form tb pode ser chamado através do menu, e quando o faço, ai sim, o registro é mostrado, se vc ver a imagem, verá exatamente como fica quando acabo de salvar.
Devo ainda dizer q os dados q não são visualizados, fazem parte de relacionamentos.
Sempre q salvo um registro, é exibido um form com um rich:datatable, com todos os dados já cadastrados, mas, o registro q acabei de inserir não é mostrado; esse form tb pode ser chamado através do menu, e quando o faço, ai sim, o registro é mostrado, se vc ver a imagem, verá exatamente como fica quando acabo de salvar.
Devo ainda dizer q os dados q não são visualizados, fazem parte de relacionamentos.
GOSTEI 0
Dyego Carmo
14/05/2010
Entendi...
Voce esta com um problema de CACHE...
para listar os elementos em tela voce faz uma pesquisa e armazena em uma variavel na classe
quando voce adicionar voce deve realizar novamente esta pesquisa , senao a variavel nao eh atualizada com esta nova instancia !
Teste e me avise !
Voce esta com um problema de CACHE...
para listar os elementos em tela voce faz uma pesquisa e armazena em uma variavel na classe
quando voce adicionar voce deve realizar novamente esta pesquisa , senao a variavel nao eh atualizada com esta nova instancia !
Teste e me avise !
GOSTEI 0
Carlos Mazzi
14/05/2010
Deu certo?
GOSTEI 0
José Filho
14/05/2010
Carlos, na verdade ainda não testei o procedimento do Dyego, mas, mesmo q dê certo, acho muito estranho ter q fazer uma pesquisa toda vez q inserir um novo registro, mas se for o jeito!!
obrigado
obrigado
GOSTEI 0
Dyego Carmo
14/05/2010
Ou voce pesquisa tudo , OU voce adiciona manualmente na lista , não tem outra forma. :)
Fica a dica :)
Fica a dica :)
GOSTEI 0
Carlos Mazzi
14/05/2010
tente implementar um " atualizar " um metodo que abra uma select de sua table... verifique isso deveria estar acontecendo automaticamente na sua classe DAO+Hibernate, pois o mesmo ja faz isso...(ou deveria), MAS... senao estiver fazendo faca um teste de atualizar com metodo manual... e se der certo depois implemente em algum evento que lhe parecer conveniente. Pelo menos ficara mais "inteligente" para vc e pro usuario.
Cierto?
GOSTEI 0
Dyego Carmo
14/05/2010
Conseguiste ?
Funcionou ? :D
Funcionou ? :D
GOSTEI 0
José Filho
14/05/2010
Fiz de uma outra forma, deu certo.
Obrigado a todos.
Obrigado a todos.
GOSTEI 0
Dyego Carmo
14/05/2010
ValeuZ!!!
GOSTEI 0
Carlos Mazzi
14/05/2010
Fechou ! grato
GOSTEI 0