Então criei um código recursivo que retorna uma List de components. Sendo que essa lista já contem os components, não é necessário usar getComponent.
Bem, vamos ao código:
function pegarCamposPagina(viewRoot:javax.faces.component.UIViewRoot){
var listaCampos:java.util.ArrayList = new java.util.ArrayList();
function iterate(component:javax.faces.component.UIComponent){
//testa de qual tipo é o component
if(component instanceof com.ibm.xsp.component.xp.XspInputText ||
component instanceof com.ibm.xsp.component.xp.XspInputRichText ||
component instanceof com.ibm.xsp.component.xp.XspInputTextarea ||
component instanceof com.ibm.xsp.component.xp.XspInputCheckbox ||
component instanceof com.ibm.xsp.component.xp.XspInputRadio ||
component instanceof com.ibm.xsp.component.xp.XspSelectManyCheckbox ||
component instanceof com.ibm.xsp.component.xp.XspSelectOneRadio ||
component instanceof com.ibm.xsp.component.xp.XspSelectOneMenu){
listaCampos.add(component);
}
//testa se o component atual tem filhos
if(component.getChildCount() > 0){
var lista:java.util.List = component.getChildren();
for(var i:int=0; i<lista.size(); i++){
iterate(lista.get(i));
}
}
return null;
}
iterate(viewRoot);
return listaCampos;
}
Para usar esse script, pode-se criar uma Server-Side JavaScript Library e importar na página, ou simplesmente jogar no evento. Deve-se chamar esse metodo da seguinte forma:
pegarCamposPagina(getView())
O método getView() retorna a viewRoot da página. Então enviamos para o método e ele faz chamadas recursivas até listar todos os componentes. Caso queira-se apenas os campos de uma certa table ou panel, por exemplo, é necessário passar o getComponent("nomeDoComponente") para o método. Ele também funcionará.
Opa otima dica, xD
ResponderExcluir