[RESOLVIDO]Como passar um Componente por parâmetro no JSF?
16 respostas
D
Diego_Adriano
Galera, eu preciso chamar esse método para limpar a árvore de componentes, como poderia fazer ?
public static void cleanSubmittedValues(UIComponent component){
Uma pessoa me disse pra utilizar o <f:attribute /> mas sinceramente não tenho ideia de como fazer …
Caso seu objetivo seja limpar os dados do formulário, dê uma olhada no primefaces-extensions, eles já tem um componente para isso, onde se passa o id do componente:
Certo, eu preciso limpar vários inputs dentro de um form, eu deveria passar o id do form ? seria isso ?
Esse primeextensio é possivel usar com o primefaces ?
A
ayslanms
O extensions é um projeto a parte, mas eles tem apoio da equipe do primafaces.
D
Diego_Adriano
Legal, então é o mesmo esquema, baixar o Jar registrar e usar ?
Eu procurei no site lá e não tem download do Jar, sabe se é isso mesmo ?
D
Diego_Adriano
Cara, eu baixei o War do projeto e peguei o Jar, porém ele não me deixa registrar o Jar no ClassPath, seria algo relacionado a versão do Prime ? Pois uso a 3.0.1, teria algo haver ? Já que no projeto estão usando o 3.2
Talvez tenha alguma diferença para versões do primefaces.
D
Diego_Adriano
Esse link do Rafael P. li bastante ontem, por isso não entendi como passar um Componente como parâmetro …
Mas enfim … olha só o problema que estou tendo ao tentar add o Jar ao ClassPath :
Could not write file: C:\Documents and Settings\FISCAL\workspace\Contabilidade\.classpath.
C:\Documents and Settings\FISCAL\workspace\Contabilidade\.classpath (Acesso negado)
B
Big_E
Se entendi você tem componentes no formulário e quer limpar os valores preenchidos na action desse botão certo?
Na verdade eu crio outro objeto qdo chamo o botão Limpar, mas o form não é limpo, então no site do R.Pontes fui um posto sobre Limpar árvore de componentes, porém não sei como implementar isso no meu projeto.
publicstaticvoidcleanSubmittedValues(UIComponentcomponent){if(componentinstanceofEditableValueHolder){EditableValueHolderevh=(EditableValueHolder)component;evh.setSubmittedValue(null);evh.setValue(null);evh.setLocalValueSet(false);evh.setValid(true);}// Dependendo de como se implementa um Composite Component, ele retorna ZERO// na busca por filhos. Nesse caso devemos iterar sobre os componentes que o // compõe de forma diferente.if(UIComponent.isCompositeComponent(component)){Iteratori=component.getFacetsAndChildren();while(i.hasNext()){UIComponentcomp=(UIComponent)i.next();//TODO: isolar em um método?if(comp.getChildCount()>0){for(UIComponentchild:comp.getChildren()){cleanSubmittedValues(child);}}}}
T
tirq
Eu tive o mesmo problema tempos atras com jsf 1.2, resolvi da seguinte forma:
Explicando:
Tenho o form como binding, e quando clico no botão voltar eu limpo o objeto e chamo o .cleanSubmittedValues para limpar a árvore de componentes!
Espero que seja resolva o teu problema
B
Big_E
Estanho, atribuir os valores default era para resolver o problema, mas acredito que seja em função da presença do atributo immediate=“true” no seu botão.
T
tirq
No link do rponte explica que em certas ocasiões, não resolve apenas limpar o objeto, tem que limpar a arvore de componentes!
o immediate = true é apenaspara realizar a ação do botão sem fazer nenhuma outra validação
B
Big_E
Blz, desconfiei do immediate=“true” apenas por ele agir diretamente na fase PROCESS VALIDATE do clico de vida do JSF.
Dessa forma pode inibir os valores que serão processados no RESTORE VIEW.
Acho que vale a pena testar sem o atributo só por desencargo de consciência. hehe
T
tirq
No meu caso eu precisava do immediate, por que caso o usuário clicasse no voltar e tivesse algum campo com required=true sem dado ele não ia voltar!
D
Diego_Adriano
Galera, mais uma vez com a ajuda de vcs consegui resolver mais um problema, bem acabei que não precisei limpar a Árvore, então basicamente ficou apenas assim: