reRender não funciona (Não Resolvido) :(

4 respostas
Gerson_da_S_Lima

PessoAll, to tendo um probleminha ao tentar re renderizar um modal panel. Pelo menos eu acho q isso o problema.
Vamos a situação.
Dentro de uma rich:tree dentre várias coisas eu tenho um a4j:commandLink que chama um método no bean, seta um texto em um dos atributos e ao completar abre um rich:modalPanel. Bem tudo isso ele faz, o problema é que nesse modal panel tem um textArea, que está vinculado a esse atributo do bean que setei no método, o problema é que ele nunca carrega o valor setar.
Debugando eu percebi que ele só chama o método get do referido atributo na primeira vez, quando ele monta a página, o que parece que ele não faz o reRender que coloquei.
Segue o código:

Código do método chamado pelo commandLink

public void setarTextoASerExibido(ActionEvent event) { ItemArvoreAnaliseDispendio item = (ItemArvoreAnaliseDispendio) ((UIComponent) event.getComponent().getChildren().get(0)).getAttributes().get("value"); textoASerExibido = item.getAtividadesVinculadas(); }

commandLink

<a4j:commandLink rendered="#{no.renderedAtividadesVinculadas}" title="Dispêndio vinculado a outras atividades, clique para visualizar!" actionListener="#{beanAnaliseProjeto.setarTextoASerExibido }" reRender="panelTexto" oncomplete="javascript:Richfaces.showModalPanel('panelTexto')"> <f:param name="value" value="#{no }" /> <f:param name="value" value="1" /> <h:graphicImage url="/images/icons/alerta.gif" /> </a4j:commandLink>

modalPanel

<t:div id="blocoPanelTexto"> <rich:modalPanel id="panelTexto" width="300" height="250"> <f:facet name="controls"> <h:graphicImage value="/images/close.png" style="cursor:pointer" onclick="Richfaces.hideModalPanel('panelTexto')" /> </f:facet> <h:inputTextarea id="textArea" value="#{beanRelatorio.textoASerExibido }" readonly="true" /> </rich:modalPanel> </t:div>

Alguém pode dar um help?

4 Respostas

P

Olá amigo eis uma solução simples, faça o retorno do seu metodo da action String e mapei seu xhtml no faces-config dai vc retorna a string e chama a tela dnovo e vai ta tudo renderizado bunitinho.

Gerson_da_S_Lima

Olá PedroGuerra. Valeu por tentar ajudar, mas é o seguinte, não posso fazer desse jeito, pois assim vai recarregar a página e voltar para o topo, e como eu disse esse link está dentro de uma árvore (rich:tree), e essa árvore pode ficar muito grande dependendo do projeto que for selecionado.
Essa árvore é para uns técnicos de P&D avaliarem projetos enviados por empresas, nos vários nós da árvore são exibidas informações da empresa, do projeto, dados de faturamento e etc. E dependendo do nível em que ele está, o técnico não apenas visualiza os dados, mas também faz a análise dele dentro da árvore.
Eu já implementei algo parecido dentro dessa mesma árvore, só que ao invés de abrir um modal, eu abro um div dentro da árvore mesmo com um formulário. Inclusive eu não usei o modal porque estava tendo problema, mas pra esse caso seria melhor um modal, caso contrário vai ficar esteticamente feio, mas se não tiver jeito… :frowning:

E pior Pedro, eu tentei fazer como você sugeriu pra vê no que dava, mas nem abre mais o modal, o que faz todo o sentido já que estamos recarregando novamente a página. A não ser que eu criasse algum método pra reabrir o modal, mas isso vai ficar bem pior. :slight_smile:

P

Olá novamente Gerson, então eu estou iniciando nessa vida de Jsf mais vamo ve,
eu estou desconfiando que ele ta tentando dar o rerender antes de dar o showModal, agora como resolver isso vou pensar mais 1 pouco

Gerson_da_S_Lima

Cara eu acho que ele nem tá dando o reRender, porque ele não chama o método get do atributo vinculado ao textArea. Só chama na primeira vez.

PS: os id que ele gera para o textArea é esse: formTemplate:paginaIncluida:textArea, isso porque o código dessa página é incluída por outra.
então tentei de todo jeito, mudando o valor do id no reRender, mas não deu jeito, e também não acho que seja isso, pois ele abre o modal. :frowning:

Criado 29 de outubro de 2010
Ultima resposta 29 de out. de 2010
Respostas 4
Participantes 2