Cenário do meu problema:
Tudo funcionava muito bem até que um belo dia resolvi atualizar meu Tomahawk para poder utilizar algumas novidades atraentes a mim, como por exemplo o headercolspan do t:column. Eu utilizava a versão 1.1.5 e estava atualizando para mais recente 1.1.8. Troquei a lib rodei o projeto e Voilá!! Um t:commandLink que ficava no meu template parou de funcionar. Primeiro deu raiva, depois ódio, mas logo me acalmei e mandei todo o projeto para um lugar nada agradável para qualquer um.
Pensei um pouco e cheguei a conclusão de que o problema era o Myfaces como um todo. Ainda utilizava a versão 1.1.5 então resolvi updateala também para a versão mais nova 1.2.6. Finalmente percebi que o problema persistia e minha paciência não.
Resolvi dar uma olhada mais cuidadosa no erro através do firebug:
form is undefinedif(typeof form.elements[name]=='undefined')
Pensei Que diabos é isso? Funcionava antes! Fui olhar o código javascript gerado pelo tomahawk:
var form = document.forms[formname];if(typeof form.elements[name]=='undefined')
{
var newInput = document.createElement('input');
newInput.setAttribute('type','hidden');
newInput.setAttribute('id',name);
newInput.setAttribute('name',name);
newInput.setAttribute('value',value);
form.appendChild(newInput);
}
else
{
form.elements[name].value=value;
}
Debugando o código notei que seria obrigatório colocar o t:commandLink dentro de um form (ou h:form). Alguém pode até estar se perguntando porque eu não coloquei o componente dentro de um form. A resposta é simples, eu não precisava colocar porque eu não precisava de um form naquela região do template. Lembrando a todos que um template é, normalmente, usado para moldar as páginas do projeto (ou parte delas). O template no JSF é como o master page do .Net.
Solução:
Colocar o t:commandLink dentro de um form ou h:form (meu caso), como no código abaixo:
<h:form>Finalmente mais um problema solucionado e post lançado!!
<t:commandlink action="#{meuBean.acao}">Link no template</t:commandlink>
</h:form>
Nenhum comentário:
Postar um comentário