Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
FacesUtils.cleanSubmittedValues method with support to composite components
/**
* Limpa os dados dos componentes de edição e de seus filhos,
* recursivamente. Checa se o componente é instância de EditableValueHolder
* e 'reseta' suas propriedades.
* <p>
* Quando este método, por algum motivo, não funcionar, parta para ignorância
* e limpe o componente assim:
* <p><blockquote><pre>
* component.getChildren().clear()
* </pre></blockquote>
* :-)
*
* Método fornecido por Rafael Pontes.
*
* Alterado Por: Danilo Magrini
*/
public static void cleanSubmittedValues(UIComponent component){
if (component instanceof EditableValueHolder) {
EditableValueHolder evh = (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)) {
Iterator i = component.getFacetsAndChildren();
while(i.hasNext()) {
UIComponent comp = (UIComponent) i.next();
//TODO: isolar em um método?
if (comp.getChildCount() > 0) {
for (UIComponent child : comp.getChildren()) {
cleanSubmittedValues(child);
}
}
}
}
//TODO: isolar em um método?
if (component.getChildCount() > 0) {
for (UIComponent child : component.getChildren()) {
cleanSubmittedValues(child);
}
}
}
/* another implementation, this time focused on jsf2 ajax feature */
FacesContext facesContext = FacesContext.getCurrentInstance();
PartialViewContext partialViewContext = facesContext.getPartialViewContext();
Collection<String> renderIds = partialViewContext.getRenderIds();
for (String renderId : renderIds) {
UIComponent component = viewRoot.findComponent(renderId);
EditableValueHolder input = (EditableValueHolder) component;
input.resetValue();
}
@rponte

This comment has been minimized.

Copy link
Owner Author

rponte commented Apr 28, 2011

Essa solução foi implementada pelo @danilomagrini baseado nesse exemplo https://github.com/rponte/jsf-loja-project/blob/master/src/br/com/triadworks/loja/util/FacesUtils.java#L58 .

Na verdade não me recordo de ter tido problemas com composite components no Jsf1.2, como também não tenho idéia do porquê o problema ocorre e como de fato os composite components são tratados pelo faces na árvore de componentes.

@rponte

This comment has been minimized.

Copy link
Owner Author

rponte commented May 25, 2011

Aparentemente no JSF2.0 é possível fazer isso:
EditableValueHolder evh = (EditableValueHolder) uicomponent;
evh.resetValue();

@john182

This comment has been minimized.

Copy link

john182 commented Oct 25, 2017

com seria o uso ???

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.