[RESOLVIDO] problemas ao tentar usar um reRender do a4j:support
16 respostas
R
robertoJames
Boa tarde pessoal,
estou com problemas ao tentar renderizar uma parte de meu formulario.
segue o codigo abaixo:
<h:panelGroupid="teste"><a4j:outputPanelid="painel_categoria_infracao"ajaxRendered="true"><a4j:region><h:outputLabelvalue="Categoria Infração:"/><h:selectOneMenuvalue="#{infracaoBean.categoriaInfracao.idCategoriaInfracao}"id="categoriaInfracao"><f:selectItemitemLabel="Categoria da Infracao"/><f:selectItemsvalue="#{infracaoBean.obterCategoriasInfracoes}"/><a4j:supportevent="onchange"reRender="form1"ajaxSingle="true"action="#{infracaoBean.verificaCategoriaInfracao}"/></h:selectOneMenu><a4j:outputPanelid="panel_protocolo"rendered="#{infracaoBean.categoriaInfracaoMunicipal}"><h:outputLabelvalue="Nº do Protocolo:"/><h:inputTextvalue="#{infracaoBean.infracao.numProtocolo}"/></a4j:outputPanel></a4j:region></a4j:outputPanel></h:panelGroup>
Mais um clássico caso de faltou o <h:form> ou melhor <a4j:form>
R
robertoJames
Foi porque eu não postei o codigo inteiro.
<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:rich="http://richfaces.org/rich"xmlns:a4j="http://richfaces.org/a4j"xmlns:t="http://myfaces.apache.org/tomahawk"><ui:compositiontemplate="/pages/layout.xhtml"><ui:definename="titulo">SistemadeControledeFrota
</ui:define><ui:definename="conteudo"><a4j:formid="form1"><h:panelGroupid="teste"><a4j:outputPanelid="painel_categoria_infracao"ajaxRendered="true"><a4j:region><h:outputLabelvalue="Categoria Infração:"/><h:selectOneMenuvalue="#{infracaoBean.categoriaInfracao.idCategoriaInfracao}"id="categoriaInfracao"><f:selectItemitemLabel="Categoria da Infracao"/><f:selectItemsvalue="#{infracaoBean.obterCategoriasInfracoes}"/><a4j:supportevent="onchange"reRender="form1"ajaxSingle="true"action="#{infracaoBean.verificaCategoriaInfracao}"/></h:selectOneMenu><a4j:outputPanelid="panel_protocolo"rendered="#{infracaoBean.categoriaInfracaoMunicipal}"><h:outputLabelvalue="Nº do Protocolo:"/><h:inputTextvalue="#{infracaoBean.infracao.numProtocolo}"/></a4j:outputPanel></a4j:region></a4j:outputPanel></h:panelGroup></a4j:form></ui:define></ui:composition></html>
F
Flavio_machine
sei la cara eu tentaria tirar os a4j:region e dar um rerender em um panel nao em um form.
Mas muda de valor o selet e ele nao ta chamando no servidor ?
R
robertoJames
Nâo não, eu coloco para debbugar, ele não passa pelo método da action.
F
Flavio_machine
E se vc tirar ela fo a4j:suport e colcar em uma command link funciona ?
F
Flavio_Almeida
Se eu compreendi corretamente, sua intenção é dar reRender nesta parte do código:
<a4j:outputPanel id=“panel_protocolo” rendered="#{infracaoBean.categoriaInfracaoMunicipal}">
<h:outputLabel value=“Nº do Protocolo:”/>
<h:inputText value="#{infracaoBean.infracao.numProtocolo}"/>
</a4j:outputPanel>
Se for isso, faça o seguinte:
<h:panelGrid id = “meRenderize”>
<a4j:outputPanel id=“panel_protocolo” rendered="#{infracaoBean.categoriaInfracaoMunicipal}">
<h:outputLabel value=“Nº do Protocolo:”/>
<h:inputText value="#{infracaoBean.infracao.numProtocolo}"/>
</a4j:outputPanel>
</h:panelGrid>
No lugar de dar reRender em form1, dê reRender em “meRenderize”.
Quando você tem um objeto que possui o atributo “rendered” com condição, você deve colocá-lo em outro painel e dar reRender neste painel. Limitação do framework (mas eles explicam a razão).
Abraço
J
joaorafael
Nesta parde de seu codigo coloque o process pois como vc colocou o ajaxSingle=“true” ele só manda para o Bean o que esta neste componente.
e para processar tem que colocar o process com o id dos componentes a serem processados pelo Bean
<h:selectOneMenuvalue="#{infracaoBean.categoriaInfracao.idCategoriaInfracao}"id="categoriaInfracao"><f:selectItemitemLabel="Categoria da Infracao"/><f:selectItemsvalue="#{infracaoBean.obterCategoriasInfracoes}"/><a4j:supportevent="onchange"reRender="form1"ajaxSingle="true"process="categoriaInfracao"action="#{infracaoBean.verificaCategoriaInfracao}"/></h:selectOneMenu>
Qual quer duvida estamos ai.
R
robertoJames
Bom dia meus caros amigos,
fiz desta forma:
<h:formid="form1"><h:panelGroupid="teste"><a4j:outputPanelid="painel_categoria_infracao"ajaxRendered="true"><a4j:region><h:outputLabelvalue="Categoria Infração:"/><h:selectOneMenuvalue="#{infracaoBean.categoriaInfracao.idCategoriaInfracao}"id="categoriaInfracao"><f:selectItemitemLabel="Categoria da Infracao"/><f:selectItemsvalue="#{infracaoBean.obterCategoriasInfracoes}"/><a4j:supportevent="onchange"reRender="meRenderize"ajaxSingle="true"process="categoriaInfracao"action="#{infracaoBean.verificaCategoriaInfracao}"/></h:selectOneMenu><h:panelGridid ="meRenderize"><a4j:outputPanelid="panel_protocolo"rendered="#{infracaoBean.categoriaInfracaoMunicipal}"><h:outputLabelvalue="Nº do Protocolo:"/><h:inputTextvalue="#{infracaoBean.infracao.numProtocolo}"/></a4j:outputPanel></h:panelGrid></a4j:region></a4j:outputPanel></h:panelGroup></h:form>
e continua sem fazer nada, ou seja, sem entrar no método que muda o valor do boolean e não da erro algum,
se eu fizer isto: action="#{infracaoBean.verificaCategoriaInfracao()}"
da um erro muito grande.
e tirando o ajaxRendered true, continua a mesma coisa,
ou seja,
não faz nada, não mostra erro.
nada.
eu mudei um pouco o meu código para esse formato:
<a4j:formid="form1"><a4j:regionid="teste"><h:panelGridcolumns="1"><a4j:outputPanelid="painel1"><h:outputLabelvalue="Categoria Infração:"/><h:selectOneMenuvalue="#{infracaoBean.categoriaInfracao.idCategoriaInfracao}"id="categoriaInfracao"><f:selectItemitemLabel="Categoria da Infracao"/><f:selectItemsvalue="#{infracaoBean.obterCategoriasInfracoes}"/><a4j:supportevent="onmousedown"reRender="painel2"ajaxSingle="true"action="#{infracaoBean.verificaCategoriaInfracao}"/></h:selectOneMenu></a4j:outputPanel><a4j:outputPanelid="painel2"ajaxRendered="true"rendered="#{infracaoBean.categoriaInfracaoMunicipal}"><h:outputLabelvalue="Nº do Protocolo:"/><h:inputTextvalue="#{infracaoBean.infracao.numProtocolo}"/></a4j:outputPanel></h:panelGrid></a4j:region></a4j:form>
mas continua sem funcionar.
J
joaorafael
Teoricamente isto era para funcionar, quando vc coloca o action="#{infracaoBean.verificaCategoriaInfracao()}" que erro que da?
Este “infracaoBean.obterCategoriasInfracoes” é um atributo ou um metodo?
Grato,
R
robertoJames
é um atributo.
Deixa eu atualizar a situação:
eu desisti de usar o select on menu e resolvi utilizar o on Radio.
então a estrutura ficou dessa forma:
<h:formid="form1"><h:panelGridcolumns="1"><a4j:outputPanelid="painel1"><h:outputLabelvalue="Categoria Infração:"/><h:selectOneRadioid="radio1"value="#{infracaoBean.valorCategoriaInfracao}"><f:selectItemitemLabel="AMC - Municipal"itemValue="1"/><f:selectItemitemLabel="CPRV - Estadual"itemValue="2"/><f:selectItemitemLabel="PRF - Federal"itemValue="3"/><a4j:supportevent="onclick"action="#{infracaoBean.verificaCategoriaInfracao}"reRender="painel_form2"/></h:selectOneRadio></a4j:outputPanel></h:panelGrid></h:form><h:formid="painel_form2"><h:panelGridid="painel2"rendered="#{infracaoBean.categoriaInfracaoMunicipal}"columns="2"><h:outputLabelvalue="Nº do Protocolo:"/><h:inputTextvalue="#{infracaoBean.infracao.numProtocolo}"/></h:panelGrid></h:form>
O que está acontecendo, é que o método da action não está sendo chamado de forma alguma.