Validar e não validar Campos obrigatórios em JSF na mesma página
10 respostas
J
jocamsg
Na mesma página JSF, tem o campo chamado que precisa ser validado ao clicar no botão “Salvar”. No entanto, quanto clico no botão “Pesquisar” que está na mesma página, não é obrigatório informar o número do chamado. No entanto, o JSF informa que o campo é obrigatório e a pesquisa não prossegue. Lembrando que, ao clicar no botão “Salvar” o sistema irá apenas salvar os dados no banco de dados, e funciona corretamente. E, ao clicar no botão pesquisar, o sistema precisa exibir uma outra página com todos os registros encontrados. Segue minha página JSF de exemplo.
Desde já, obrigado…
<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:h="http://java.sun.com/jsf/html"xmlns:f="http://java.sun.com/jsf/core"xmlns:ui="http://java.sun.com/jsf/facelets"xmlns:c="http://java.sun.com/jstl/core"xmlns:tr="http://myfaces.apache.org/trinidad"lang="pt-br"><body><ui:compositiontemplate="template.xhtml"><ui:definename="titulo">
Cadastro de Pedidos da Operadora
</ui:define><ui:definename="conteudo"><divid="formulario"><h:panelGridcolumns="1"width="100%"><h:outputTextvalue="Chamado 108 On-Line"/><h:inputTextid="ped_Chamado"value="#{pedidoOperadoraController.pedidoOperadora.ped_Chamado}"required="true"requiredMessage="Campo obrigatório"size="20"maxlength="15"/><f:paramid="paramChamado"value="#{pedidoOperadoraController.pedidoOperadora.ped_Chamado}"/><h:messagefor="ped_Chamado"/><!--<h:message for="ped_Chamado"/> required="true" requiredMessage="Campo obrigatório" --><!-- --><h:outputTextvalue="Regional"/><h:inputTextid="ped_Regional"value="#{pedidoOperadoraController.pedidoOperadora.ped_Regional}"size="20"maxlength="15"/><f:paramid="paramRegional"value="#{pedidoOperadoraController.pedidoOperadora.ped_Regional}"/><h:outputTextvalue="Operadora"/><h:inputTextid="ped_Operadora"value="#{pedidoOperadoraController.pedidoOperadora.ped_Operadora}"size="20"maxlength="15"></h:inputText><f:paramid="paramOperadora"value="#{pedidoOperadoraController.pedidoOperadora.ped_Operadora}"/><h:outputTextvalue="Data do Chamado 108 On-Line"/><h:inputTextid="ped_DataChamado"value="#{pedidoOperadoraController.pedidoOperadora.ped_DataChamado}"size="13"maxlength="10"/><h:outputTextvalue="Data de Envio para Assinatura HP"/><h:inputTextid="ped_DataEnvioAssinatura"value="#{pedidoOperadoraController.pedidoOperadora.ped_DataEnvioAssinatura}"size="15"maxlength="10"/><h:outputTextvalue="Data de Retorno HP"/><h:inputTextid="ped_DataRetorno"value="#{pedidoOperadoraController.pedidoOperadora.ped_DataRetorno}"size="13"maxlength="10"/><h:outputTextvalue="Data de Envio para Operadora"/><h:inputTextid="ped_DataEnvioOperadora"value="#{pedidoOperadoraController.pedidoOperadora.ped_DataEnvioOperadora}"size="13"maxlength="10"/><h:outputTextvalue="Data de Retorno da Operadora"/><h:inputTextid="ped_DataRetornoOperadora"value="#{pedidoOperadoraController.pedidoOperadora.ped_DataRetornoOperadora}"size="13"maxlength="10"/><h:outputTextvalue="No. do Pedido da Operadora"/><h:inputTextid="ped_PedidoOperadora"value="#{pedidoOperadoraController.pedidoOperadora.ped_PedidoOperadora}"size="35"maxlength="25"/><h:outputTextvalue="Data de Entrega do Aparelho - Operadora"/><h:inputTextid="ped_dataEntregaAparelho"value="#{pedidoOperadoraController.pedidoOperadora.ped_DataEntregaAparelho}"size="13"maxlength="10"/><h:outputTextvalue="Observação"/><h:inputTextareaid="ped_Observacao"value="#{pedidoOperadoraController.pedidoOperadora.ped_Observacao}"cols="70"rows="5"/></h:panelGrid><h:panelGridborder="0"columns="3"><h:column><h:commandButtonvalue="Salvar"class="botao"action="#{pedidoOperadoraController.salvar}"><!--image="../images/btn_Salvar.jpg"--></h:commandButton></h:column><h:column><h:commandButtonvalue="Pesquisar"class="botao"immediate="true"actionListener="#{pedidoOperadoraController.capturaParametros}"action="mostrarPedidoOperadora"></h:commandButton></h:column><h:column><h:commandButtonvalue="Limpar"class="botao"action="#{pedidoOperadoraController.novoPedidoOperadora}"></h:commandButton></h:column></h:panelGrid></div></ui:define></ui:composition></body></html>
Fábio, já tem o immediate=“true” no botão, conforme o código anexado. É este o problema, mesmo assim não funciona.
N
newbcc
Olá,
deveria funcionar. Faça o seguinte teste:
Remova o actionListener do commandButton Pesquisar (faça a chamada diretamente para action)
Reinicie o seu servidor. Se necessário, apague os arquivos temporários e o próprio .war de deploy. Refaça o deploy e reinicie o servidor
Da maneira que você fez está correto. Eu tenho um formulário muito parecido como este seu, e funciona exatamente da maneira que você gostaria.
Abs!
J
jocamsg
Ja exclui o .war e os arquivos temporários. Agora, não entendi quando disse para fazer a chamada diretamente para a ACTION.
Estou anexando o código fonte da classe controladora e o arquivo que mostra os resultados da pesquisa. Veja se pode me ajudar. Lembrando que eu preciso executar o ActionListener para pegar alguns parâmatros para pesquisa, quanto eles são informados.
packagebr.com.integrator.controller;importjava.util.HashMap;importjava.util.Map;importjavax.annotation.Resource;importjavax.faces.application.FacesMessage;importjavax.faces.component.UIParameter;importjavax.faces.event.ActionEvent;importjavax.faces.model.DataModel;importjavax.faces.model.ListDataModel;importjavax.faces.component.html.HtmlInputText;importjavax.faces.context.FacesContext;importorg.apache.poi.hssf.record.formula.functions.Even;importorg.springframework.context.annotation.Scope;importorg.springframework.stereotype.Controller;importbr.com.integrator.dao.DaoGenerico;importbr.com.integrator.entities.PedidoOperadora;importbr.com.integrator.util.FacesUtils;@Controller("pedidoOperadoraController")@Scope("session")publicclassPedidoOperadoraController{privatePedidoOperadorapedidoOperadora;@ResourceprivateDaoGenerico<PedidoOperadora,Integer>pedidoOperadoraDao;privateDataModelmodel;privateintmaxPorPagina=20;privateintpaginaAtual=0;privateinttotalRegistros;privateStringparamChamado;privateStringparamRegional;privateStringparamOperadora;publicHtmlInputTextinputChamado;publicHtmlInputTextgetInputChamado(){returninputChamado;}publicvoidsetInputChamado(HtmlInputTextinputChamado){this.inputChamado=inputChamado;}publicStringgetParamChamado(){returnparamChamado;}publicvoidsetParamChamado(StringparamChamado){this.paramChamado=paramChamado;}publicStringgetParamRegional(){returnparamRegional;}publicvoidsetParamRegional(StringparamRegional){this.paramRegional=paramRegional;}publicStringgetParamOperadora(){returnparamOperadora;}publicvoidsetParamOperadora(StringparamOperadora){this.paramOperadora=paramOperadora;}publicPedidoOperadoragetPedidoOperadora(){returnpedidoOperadora;}publicvoidsetPedidoOperadora(PedidoOperadorapedidoOperadora){this.pedidoOperadora=pedidoOperadora;}publicDaoGenerico<PedidoOperadora,Integer>getPedidoOperadoraDao(){returnpedidoOperadoraDao;}publicvoidsetPedidoOperadoraDao(DaoGenerico<PedidoOperadora,Integer>pedidoOperadoraDao){this.pedidoOperadoraDao=pedidoOperadoraDao;}publicDataModelgetModel(){returnmodel;}publicvoidsetModel(DataModelmodel){this.model=model;}publicPedidoOperadoraController(){this.pedidoOperadora=newPedidoOperadora();}publicStringnovoPedidoOperadora(){this.pedidoOperadora=newPedidoOperadora();return"frmPedidoOperadora";}publicintgetMaxPorPagina(){returnmaxPorPagina;}publicvoidsetMaxPorPagina(intmaxPorPagina){this.maxPorPagina=maxPorPagina;}publicintgetPaginaAtual(){returnpaginaAtual;}publicvoidsetPaginaAtual(intpaginaAtual){this.paginaAtual=paginaAtual;}publicintgetTotalRegistros(){returntotalRegistros;}publicvoidsetTotalRegistros(inttotalRegistros){this.totalRegistros=totalRegistros;}publicStringsalvar(){try{if(pedidoOperadora.getPed_Id()==null){pedidoOperadoraDao.salvar(pedidoOperadora);this.novoPedidoOperadora();FacesUtils.mensInfo("Pedido cadastrado com sucesso.");FacesContextcontext=FacesContext.getCurrentInstance();FacesMessagemessage=newFacesMessage("Salvo com sucesso.");context.addMessage("frmPedidoOperadora",message);}else{pedidoOperadoraDao.atualizar(pedidoOperadora);FacesUtils.mensInfo("Pedido atualizado com sucesso.");}}catch(Exceptione){FacesUtils.mensErro("Ocorreu erro ao gravar o Pedido.");e.printStackTrace();}return"sucesso";}publicStringeditar(){setPedidoOperadora(getPedidoOperadoraParaEditarExcluir());return"frmPedidoOperadora";}publicStringexcluir(){PedidoOperadorapedidoOperadora=getPedidoOperadoraParaEditarExcluir();pedidoOperadoraDao.excluir(pedidoOperadora);return"frmMostrarPedidoOperadora";}publicStringlimpar(){return"loginCorreto";}publicPedidoOperadoragetPedidoOperadoraParaEditarExcluir(){PedidoOperadorapedidoOperadora=(PedidoOperadora)model.getRowData();returnpedidoOperadora;}publicDataModelgetTodos(){//captura o total de registros para efetuar a paginação...//setTotalRegistros(getTotal());//model = new ListDataModel(pedidoOperadoraDao.listPesq(retornaQuery(), maxPorPagina, paginaAtual));StringsWhere=newString();Stringquery="SELECT ped FROM PedidoOperadora ped "+" WHERE (1=1) ";sWhere="";Map<String,Object>params=newHashMap<String,Object>();if(!this.getParamChamado().isEmpty()){params.put("chamado","%"+this.getParamChamado()+"%");sWhere=sWhere+" AND ped.ped_Chamado LIKE :chamado ";};if(!this.getParamRegional().isEmpty()){params.put("regional","%"+this.getParamRegional()+"%");sWhere=sWhere+" AND ped.ped_Regional LIKE :regional ";};if(!this.getParamOperadora().isEmpty()){params.put("operadora","%"+this.getParamOperadora()+"%");sWhere=sWhere+" AND ped.ped_Operadora LIKE :operadora ";};query=query+sWhere+" ORDER BY ped.ped_Id ";model=newListDataModel(pedidoOperadoraDao.listPesqParam(query,params,maxPorPagina,paginaAtual));returnmodel;}publicStringpesquisar(){//captura o total de registros para efetuar a paginação...//setTotalRegistros(getTotal());if(getTotalRegistros()>0){return"mostrarPedidoOperadora";}else{return"frmMensagem";}}/* Início Paginação *///Paginacao dos resultados//Evita estouro de memoriapublicStringprimeiraPagina(){paginaAtual=0;returnnull;}publicStringultimaPagina(){intrest=totalRegistros%maxPorPagina;if(rest!=0)paginaAtual=totalRegistros-rest;elsepaginaAtual=totalRegistros-maxPorPagina;returnnull;}publicIntegergetTotal(){//captura o total de registros através de um select COUNT utilizando a JPA...//Isto evita estouro de memória "out of memory: java heap space" do java//StringsWhere=newString();Stringquery="SELECT COUNT(ped_Chamado) FROM PedidoOperadora ped "+" WHERE (1=1) ";sWhere="";Map<String,Object>params=newHashMap<String,Object>();if(!this.getParamChamado().isEmpty()){params.put("chamado","%"+this.getParamChamado()+"%");sWhere=sWhere+" AND ped.ped_Chamado LIKE :chamado ";};if(!this.getParamRegional().isEmpty()){params.put("regional","%"+this.getParamRegional()+"%");sWhere=sWhere+" AND ped.ped_Regional LIKE :regional ";};if(!this.getParamOperadora().isEmpty()){params.put("operadora","%"+this.getParamOperadora()+"%");sWhere=sWhere+" AND ped.ped_Operadora LIKE :operadora ";};query=query+sWhere;NumbernumeroRegistros=pedidoOperadoraDao.numeroRegistros(query,params);StringstrNumeroRegistros=numeroRegistros.toString();IntegerintNumero=Integer.parseInt(strNumeroRegistros);returnintNumero;}publicintgetProximaPagina(){inttotal=totalRegistros;intsoma=paginaAtual+maxPorPagina;intproxima=(soma>total)?total:soma;returnproxima;}//navega para a proxima paginapublicStringproxima(){intsoma=paginaAtual+maxPorPagina;if(soma<totalRegistros){paginaAtual+=maxPorPagina;}returnnull;}//navega para a pagina anteriorpublicStringanterior(){paginaAtual-=maxPorPagina;if(paginaAtual<0)paginaAtual=0;returnnull;}publicStringretornaQuery(){Stringquery="SELECT ped FROM PedidoOperadora ped "+" WHERE (1=1) "+retornaWhere()+" ORDER BY ped.ped_Id ";returnquery;}/* public String retornaSizeQuery() { String query = "SELECT COUNT(ped_Chamado) FROM PedidoOperadora " + " WHERE (1=1) " + retornaWhere(); return query; }*/publicStringretornaWhere(){StringsWhere=newString();sWhere="";Map<String,Object>params=newHashMap<String,Object>();if(!this.getParamChamado().isEmpty()){params.put("chamado","%"+this.getParamChamado()+"%");sWhere=sWhere+" AND ped.ped_Chamado LIKE :chamado ";};if(!this.getParamRegional().isEmpty()){params.put("regional","%"+this.getParamRegional()+"%");sWhere=sWhere+" AND ped.ped_Regional LIKE :regional ";};if(!this.getParamOperadora().isEmpty()){params.put("operadora","%"+this.getParamOperadora()+"%");sWhere=sWhere+" AND ped.ped_Operadora LIKE :operadora ";};returnsWhere;}/* Fim Paginação *//* Pesquisa com parâmetros */publicvoidcapturaParametros(ActionEventevent){UIParametercmpChamado=(UIParameter)event.getComponent().findComponent("paramChamado");this.setParamChamado((String)cmpChamado.getValue());UIParametercmpRegional=(UIParameter)event.getComponent().findComponent("paramRegional");this.setParamRegional((String)cmpRegional.getValue());UIParametercmpOperadora=(UIParameter)event.getComponent().findComponent("paramOperadora");this.setParamOperadora((String)cmpOperadora.getValue());}/* Fim Pesquisa com parâmetros */}
Formulário de pesquisa
<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:h="http://java.sun.com/jsf/html"xmlns:f="http://java.sun.com/jsf/core"xmlns:ui="http://java.sun.com/jsf/facelets"xmlns:c="http://java.sun.com/jstl/core"xmlns:tr="http://myfaces.apache.org/trinidad"lang="pt-br"><body><ui:compositiontemplate="template.xhtml"><ui:definename="titulo">
Lista de Pedidos da Operadora
</ui:define><ui:definename="conteudo"><divid="formulario"><h:messages/><h:panelGridborder="0"columns="1"><h:column><ul><li><h:commandLinkaction="loginCorreto"immediate="true"style="font-size: 15px; font-weight: bold; font: 15px; color: blue;">Voltar
</h:commandLink></li></ul></h:column></h:panelGrid><h:dataTableborder="1"id="pedidoOperadora"var="item"value="#{pedidoOperadoraController.todos}"styleClass="tabela"headerClass="cabecalho"rowClasses="claro,escuro"><h:columnid="column1"><h:outputTextvalue="#{item.ped_Id}"/><f:facetname="header"><h:outputTextvalue="ID"style="header"/></f:facet></h:column><h:columnid="column2"><h:outputTextvalue="#{item.ped_Chamado}"/><f:facetname="header"><h:outputTextvalue=" No. do Chamado 108 On-Line "style="width: 600px"/></f:facet></h:column><h:columnid="column3"><h:outputTextvalue="#{item.ped_Regional}"style="width: 350px"/><f:facetname="header"><h:outputTextvalue=" Regional "/></f:facet></h:column><h:columnid="column4"><h:outputTextvalue="#{item.ped_Operadora}"/><f:facetname="header"><h:outputTextvalue=" Operadora "style="width: 400px"/></f:facet></h:column><h:columnid="column5"><h:outputTextvalue="#{item.ped_DataChamado}"/><f:facetname="header"><h:outputTextvalue=" Data do Chamado 108 On-Line "style="width: 400px"/></f:facet></h:column><h:columnid="column6"><h:outputTextvalue="#{item.ped_PedidoOperadora}"/><f:facetname="header"><h:outputTextvalue=" Número do Pedido da Operadora "style="width: 400px"/></f:facet></h:column><h:column><center><h:commandButtonvalue="Editar"image="../images/btn_Editar.gif"action="#{pedidoOperadoraController.editar}"/></center><f:facetname="header"><h:outputTextvalue="Editar"/></f:facet></h:column><h:column><center><h:commandButtonvalue="Excluir"image="../images/btn_Excluir.gif"action="#{pedidoOperadoraController.excluir}"/></center><f:facetname="header"><h:outputTextvalue="Excluir"/></f:facet></h:column></h:dataTable><h:panelGridborder="0"columns="1"><h:column><ul><li><h:commandLinkaction="loginCorreto"immediate="true"style="font-size: 15px; font-weight: bold; font: 15px; color: blue;">Voltar
</h:commandLink></li></ul></h:column></h:panelGrid><tablecellspacing="5"><tr><td><h:commandLinkaction="#{pedidoOperadoraController.primeiraPagina}"value="Primeira"enabled="#{pedidoOperadoraController.paginaAtual != 0}"/></td><td><h:commandLinkaction="#{pedidoOperadoraController.anterior}"value="Anterior"enabled="#{pedidoOperadoraController.paginaAtual != 0}"/></td><td><h:commandLinkaction="#{pedidoOperadoraController.proxima}"value="Proxima"enabled="#{pedidoOperadoraController.total > pedidoOperadoraController.proximaPagina}"/></td><td><h:commandLinkaction="#{pedidoOperadoraController.ultimaPagina}"value="Ultima"enabled="#{pedidoOperadoraController.total > pedidoOperadoraController.proximaPagina}"/></td></tr></table></div></ui:define></ui:composition></body></html>
N
newbcc
Olá,
entendi a necessidade do Listener. Sem problemas o uso dele.
Quanto à seguinte action mostrarPedidoOperadora, esta operação foi definida no controlador PedidoOperadoraController ou em outro controlador?
Porque no PedidoOperadoraController, não foi definido nenhuma operação como essa, e sim há uma referência no return da operação pesquisar. Não deveria ter uma operação chamada mostrarPedidoOperadora nesse controlador?
Se existe e você não colocou tudo bem, mas para mim, deveria existir essa operação.
Abs!
J
jocamsg
ok… eu alterei a chamada do action no form conforme pedaço do código abaixo, que agora vai chamar o pesquisar. Veja se é isto, pois, mesmo assim, continua fazendo a validação dos campos obrigatórios.
agora o immediate=“true” esta´funcionando sim… o que acontece agora, é que, está ocorrendo erro ao renderizar a página, provavelmente por causa do actionListener. E preciso que o actionListener seja executado, para pegar os parâmetros. Como resolver?
N
newbcc
Olá,
cara, não acredito que o problema seja no seu listener, pois ele é usado para resgatar os valores da sua tela.
Acredito que o seu problema de renderização está acontecendo por mapeamento errado de navegação feito no seu faces-config.xml. Por exemplo, você tem a seguinte passagem no seu método Pesquisar:
Pegou a idéia? Se tiver alguma dúvida em relação a esses mesmos mapeamentos no seu arquivo de configuração, posta o seu faces-config.xml para que a gente dê uma olhada.
Abs!
J
jocamsg
Ok... estou postando meu FacesConfig.xml, e também meu frmMostrarOperadora.xhtml. No formulário frmMostrarOperadora.xhtml, é chamado o método pedidoOperadoraController.todos, e agora o erro ocorre ao executar este método. Estou postando também um pedaço da mensagem de erro.. Veja se pode me ajudar. Obrigado...
este erro está acontecendo porque o método da operação:
value="#{pedidoOperadoraController.todos}"
aparentemente é este
public DataModel getTodos()
correto!?
Se a sua intenção é invocar este método, por padrão do JSF, todas as ações invocadas à partir na camada de visualização, devem retornar o tipo String, assim como você fez nas seguintes chamadas:
Ambas operações estão relacionadas a métodos que retornam o tipo String. Faça essa correação no seu controlador, ou crie um outro método que retorne este tipo de valor.