3/3/11

Richfaces e function rich:component not found

Imagine que você está usando richfaces e seguindo exemplos como o disponível em http://livedemo.exadel.com/richfaces-demo/richfaces/inplaceInput.jsf?c=inplaceInput&tab=usage, que usam funções úteis como rich:component('...'). Se você tiver sorte, como eu, e alguma lua não estiver alinhada corretamente, você poderá se deparar com o seguinte erro:

... function rich:component not found ...
Há várias soluções propostas para este problema, desde adicionar richfaces-ui.jar à pasta WEB-INF/lib do seu WAR, ou usar um managedBean da classe org.richfaces.function.RichFunction e usar as funções do modo richFunction.component.
Porém, uma rápida olhada no código-fonte da classe RichFunction revela o que o que o método component faz:
... return "document.getElementById('" + clientId + "')"; ...
Ou seja, o que o backing bean faz equivale a um simples document.getElementById('idDoComponente')".

Assim, no exemplo escolhido:
onmousedown="#{rich:component('inplaceInput')}.save();" vira
onmousedown="document.getElementByID('inplaceInput').save();".

Note que o ID do componente gerado pelo JSF normalmente inclui o ID do formulário no qual este está inserido. Se o formulário tiver ID="form", o ID do componente vira "form:inplaceInput".
tchem.

1 comment:

Matheus Ribeiro said...

Quando eu tive que trabalhar com JSF, me disseram para deixar de usar o Richfaces, pois era velho e sem previsão de crescimento nem de aprimoramento. (Não tenho certeza se é mesmo verdade)

Sem contar que tive muitos problemas com ele (talvez coisa de noob).

Estou usando o Primefaces agora e está tudo mais agradável.