Olá a todos,
depois de algum tempo sem trabalhar com JSF vou colocar a mão na massa novamente e então resolvi fazer alguns testes,nestes testes me deparei com um problema envolvendo p:dialog e validação.Já passei por esse problema anteriormente e consegui solucionar(https://groups.google.com/forum/#!topic/javasf/JJaZ-MaftJY/discussion) com primefaces 3.1,mas dessa vez não está dando certo(estou utilizando prime faces 3.3) a questão é:
1- quando clico em novo tento inserir um registro com o nome vazio, ele dá o erro de validação(tudo certo)
2- eu fecho essa dialog
3-clico de novamente em novo ou editar e o campo nome já está circundado em vermelho
Alguém sabe oque está acontecendo ,onde eu estou errando ou como posso solucionar este problema?
Agradeço desde já.
**********comarca.xhtml *******************
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<title>Gerenciar Comarcas</title>
</h:head>
<h:body>
<h:form id="mainForm">
<p:outputPanel id="tablePanel">
<p:dataTable value="#{comarcaMB.comarcas}" var="c" >
<p:column>
<f:facet name="header">Código</f:facet>
#{c.id}
</p:column>
<p:column>
<f:facet name="header">Descrição</f:facet>
#{c.nome}
</p:column>
<p:column>
<f:facet name="header"></f:facet>
<p:commandButton value="Editar" update=":formDialog:painelDialog" actionListener="#{comarcaMB.prepararAlterar}" process="@this" oncomplete="janelaComarca.show()" />
</p:column>
</p:dataTable>
</p:outputPanel>
<p:commandButton value="novo" process="@this" oncomplete="janelaComarca.show()" update=":formDialog:painelDialog" actionListener="#{comarcaMB.prepararAdicionar}"/>
</h:form>
<p:dialog id="dialog" header="Gerenciar Comarca" widgetVar="janelaComarca" resizable="false" modal="true" showEffect="slide">
<p:ajax event="close" listener="#{comarcaMB.handleClose}"/>
<h:form id="formDialog">
<p:outputPanel id="painelDialog">
<p:messages autoUpdate="true"/>
<h:panelGrid columns="2">
<h:outputText value="Código" />
<h:outputText value="#{comarcaMB.comarca.id}" />
<h:outputText value="Nome" />
<p:inputText value="#{comarcaMB.comarca.nome}" required="true" requiredMessage="Campo Nome é Obrigatório" />
</h:panelGrid>
</p:outputPanel>
<p:commandButton value="salvar" update=":mainForm:tablePanel" actionListener="#{comarcaMB.salvar}" oncomplete="handleLoginRequest(xhr, status, args)"/>
</h:form>
</p:dialog>
<script type="text/javascript">
function handleLoginRequest(xhr, status, args) {
if(args.validationFailed) {
jQuery('#dialog').effect("shake", { times:3 }, 100);
} else {
janelaComarca.hide();
}
}
</script>
</h:body>
</html>
***********************ComarcaMB *************
@ManagedBean
@ViewScoped
public class ComarcaMB {
private Comarca comarca;
private ListDataModel<Comarca>comarcas;
private ComarcaDao dao;
public ComarcaMB() {
}
@PostConstruct
public void init(){
setComarca(new Comarca());
Session s = HibernateUtil.getSession();
Transaction tx = s.beginTransaction();
dao = new ComarcaDao(s);
setComarcas((ListDataModel<Comarca>) new ListDataModel(dao.findAll()));
tx.commit();
s.close();
}
public void prepararAdicionar(ActionEvent ae){
setComarca(new Comarca());
}
public void prepararAlterar(ActionEvent ae){
setComarca((Comarca) getComarcas().getRowData());
}
public void salvar(ActionEvent ae){
Session s = HibernateUtil.getSession();
Transaction tx = s.beginTransaction();
dao = new ComarcaDao(s);
if(getComarca().getId()==0){
dao.save(getComarca());
}else{
dao.update(getComarca());
}
setComarcas((ListDataModel<Comarca>) new ListDataModel(dao.findAll()));
tx.commit();
s.close();
}
public void handleClose(CloseEvent event) {
System.out.println("Executado ao fechar dialog");
this.comarca = new Comarca();
}
@PreDestroy
public void destroy(){
}
public Comarca getComarca() {
return comarca;
}
public void setComarca(Comarca comarca) {
this.comarca = comarca;
}
public ListDataModel<Comarca> getComarcas() {
return comarcas;
}
public void setComarcas(ListDataModel<Comarca> comarcas) {
this.comarcas = comarcas;
}
}