In
this blogpost I showed how to disable the persistence of a UIComponent, but it was needed to write Java code to check for the specific component and change. In this blog entry I will show a more generic way to do this, with the attribute tag.
On the showDetailItem we define an attribute with a name and value:
The Java code for the addComponentChange method in the PortalComposerChangeManager now looks like this:
public void addComponentChange(FacesContext context, UIComponent component,
ComponentChange change)
{
Map attrs = component.getAttributes();
String value = (String) attrs.get(NON_PERSIST_STRING);
if (value != null)
{
logger.fine("NonPersist attribute found, we don't persist!");
return;
}
super.addComponentChange(context, component, change);
}
I defined a static final NON_PERSIST_STRING with the value "nonPersist", like the name of the attribute. If the attribute is found, we don't persist the componentChange.
If you want a more specific approach, you can still check for a specific ComponentChange, in the case of this example, we still check if the ComponentChange matches the value in the attribute (disclosed):
public void addComponentChange(FacesContext context, UIComponent component,
ComponentChange change)
{
Map attrs = component.getAttributes();
String value = (String) attrs.get(NON_PERSIST_STRING);
if (value != null)
{
if (change instanceof AttributeComponentChange &&
value.equals(((AttributeComponentChange) change).getAttributeName()))
{ //we check if the attribute value equals the change.
logger.fine("{0} attribute found; {1} event on {2}, we don’t persist.", new Object[]
{ NON_PERSIST_STRING, value, component.getClass() });
return;
}
}
super.addComponentChange(context, component, change);
}
This code can be expanded or changed to check for specific changes according to your needs.
I uploaded a new workspace
here, so you can download and browse the source if you want to.