[RESOLVIDO] JSF e A4J: Link HTML que invoque funções ajax dos A4J?

Olá pessoal,

Estou desenvolvendo um site utilizando JSF, Facelets, A4J, RichFaces e Tomahawk.

Neste site, eu tenho textos HTML gravados num banco de dados. Onde de acordo com o link que o usuário escolhe no menu (cada link passa um id diferente como parâmetro), eu faço uma busca no banco de dados, localizo o texto e carrego na tela via ajax.

Como dito antes, estes textos carregados do banco possuem códigos HTML e provavelmente terão muitos links para outros textos que também estão gravados no banco.

Minha dúvida é a seguinte: Qual a sintaxe dos links em HTML que eu devo usar para invocar as funções ajax criadas pelo A4J, para abrir outras páginas?

Eu acho que fazer esses links funcionarem pelo código JSF é simples, o dificil é saber como gerar um HTML que dê o mesmo efeito.

Alguém já passou por isso :?:

Obrigado pessoal!!!

:lol:

vc ta tentando criar um link que aponta pra outra página que está no banco de dados?

se for isso, vc pode fazer assim:
-> tem uma página (um template de página) onde vc vai carregar o html da base dentro dela. Vc pode carregar o html da base para dentro de um h:outputText com escape=false
-> montar os links com algum mapeamento de url que tenha o id do registro do html da base que algum servlet ou mesmo um bean do jsf pegue para fazer a consulta na base e colocar o conteudo no request…

eu ja fiz uma coisa bem parecida (tirando a parte dos links) e ficou muito bom… no caso era para montar formulários dinamicos com editor online

abraços

Olá,

Mas se eu montar um link do tipo:

<a href="meuservlet?id=XXX">link</a>

Quando o usuário clicar não vai ser um processamento ajax :frowning:

Será que eu entendi o que vc quis dizer?

Eu imagino que o A4J permita invocar métodos de backingbeans via HTML+JavaScript (que eu mesmo possa escrever, invocando funções JS geradas pelo A4J).

Será que estou falando besteira?

nao está falando besteira nao… da sim pra…

mas pra fazer o link com o processamento ajax com A4J sim…
no meu caso que expliquei… precisei fazer isso…
invocar um método de backingbean via JavaScript…

nao é a forma mais bonita do mundo… aliás… se alguem souber de algum jeito mais elegante, por favor poste…

fiz da seguinte maneira

A4J.AJAX.Submit('_viewRoot','docsUsuario','onclick',{'parameters':{'docsUsuario:btRemover':'docsUsuario:btRemover'},'actionUrl':'buscarDocumento.jsf','oncomplete':function(request,event,data){myAlert('Sucesso!', null, 'O Documento foi removido com sucesso!','reload()');}});

que que fazer isso pois era um outro javascript que chamava a funcionalidade de ‘remover documento’… entao a chamada ajax tinha que ser feita na mao

onde:
docsUsuario é meu a4j:form
onclick é o evento
e tb coloquei uma funcao de javascript para ser executada no oncomplete da execução… acho que no seu caso, nao vai precisar fazer isso de oncomplete

abraços

Olá Daniel,

Nossa, é uma chamada complexa mesmo. Eu estive analisando o seu código exemplo e tb vi os códigos gerados no minha aplicação.

Teve um detalhe que eu não consegui enxergar: Onde a gente especifica qual o método do backingBean será invocado?

Vc não poderia postar mais detalhes do seu exemplo para eu tentar entender melhor?

Obrigado!!!

é complexo mesmo, cara… por isso nao tenho certeza se essa é a melhor forma… mas nem pesquisei mto tempo, pq essa gambi serviu…

eu descobri isso aí vendo o código que é gerado quando se faz um botão ou link a4j…

mas olha… para o seu caso é mais simples… já tem um componente a4j prontinho pra esse uso… esquece aquela função complexa que te passei…

usa essa aqui

<a4j:jsFunction name="myJS" reRender="nomeDocumento" >
				<a4j:actionparam name="param1" assignTo="#{docSemTplMB.nome}"  /> 
			</a4j:jsFunction> 

funciona da seguinte maneira:
quando sua pagina for renderizada, o A4J vai por uma função chamada “myJS” (que é a propriedade name da tag). e nessa funcao vai ter um parametro “param1”… que qdo executada vai atribuir o valor em assignTo…
o componente tem o rerender pra vc mostrar o html da base depois de carregado…

aí pra chamar fica extremamente simples:
myJS(‘1’) // para o caso do ID do html da base for 1…

bom… essa página vai te explicar direitinho tudo que vc precisa:
http://livedemo.exadel.com/richfaces-demo/richfaces/jsFunction.jsf

abraços… e posta aí se deu certo depois

ah… esqueci…

e vc monta seu link assim (uma sujestao):

<a href="#" onclick="myJS('1')">link</a>  

Olá Daniel,

Simplesmente funcionou que é uma beleza!!!

Eu só tive que colocar o código dentro de a4j:form e pronto!!!

Ficou uma solução simples e bonita :lol:

Muito obrigado!!!