The problem is that a list is internally not just serialized, but specially treated (wrapped, and then on restore you have a different list than you had before - no good).
And that's something that Cagatay understandably doesn't want Cagatay, how about adding an additional parameter to the component (on calling save-state) which tells the component on restore-state if it should restore the value normally or via restoreAttachedState? public Object saveState(FacesContext context) { Object values[] = new Object[3]; values[0] = super.saveState(context); boolean stateHolder = getValue() instanceof StateHolder; values[1] = stateHolder ? saveAttachedState(context, getValue()) : getValue(); values[2] = Boolean.valueOf(stateHolder); return values; } regards, Martin On 10/15/06, Matthias Wessendorf <[EMAIL PROTECTED]> wrote:
Hi catagay, javax.faces.component._AttachedStateWrapper is pretty much myfaces_api isn't it? so shouldn't be used inside the savastate custom comp. can you explain why it is failing? Thanks! On 10/14/06, Cagatay Civici <[EMAIL PROTECTED]> wrote: > Hi, > > I'd like to discuss the latest issues about the savestate component. > > In order to use the component with a value of type StateHolder, > restoreAttachedState-saveAttachedState is used. But using > them fails with list implementations other than arraylists. > > See this one; > > See this one; > http://issues.apache.org/jira/browse/TOMAHAWK-738 > > It seems restoreAttachedState-saveAttachedState should only > be used when the value is a stateholder, I've found an ugly solution to the > problem as; > > public Object saveState(FacesContext context) > { > Object values[] = new Object[2]; > values[0] = super.saveState(context); > values[1] = getValue() instanceof StateHolder ? > saveAttachedState(context, getValue()) : getValue(); > return values; > } > > public void restoreState(FacesContext context, Object state) > { > Object values[] = (Object[])state; > super.restoreState(context, values[0]); > Object value = > values[1].getClass().getName().equals(" > javax.faces.component._AttachedStateWrapper") ? > restoreAttachedState(context,values[1]) : values[1]; > > ValueBinding vb = getValueBinding("value"); > if (vb != null) > { > vb.setValue(context, value); > } > } > > Since _AttachedStateWrapper is private, I cant use instanceof, using class > name is the ugly part. Other than that it works fine with all cases. > > Any ideas about this? > > Cagatay > > > > > -- Matthias Wessendorf http://tinyurl.com/fmywh further stuff: blog: http://jroller.com/page/mwessendorf mail: mwessendorf-at-gmail-dot-com
-- http://www.irian.at Your JSF powerhouse - JSF Consulting, Development and Courses in English and German Professional Support for Apache MyFaces