I made a mistake copy paste the code of writeState. Actually looks like this:
public void writeState( FacesContext context, StateManager.SerializedView serializedView) throws IOException { ResponseWriter rw = context.getResponseWriter(); rw.startElement("input", null); rw.writeAttribute("type", "hidden", null); rw.writeAttribute("name", VIEW_STATE_PARAM, null); // Don't write out the ID, as it can be written // out twice // rw.writeAttribute("id", VIEW_STATE_PARAM, null); String s = encodeSerializedViewAsString(serializedView); rw.writeAttribute("value", s, null); rw.endElement("input"); } regards Leonardo Uribe On Wed, Jun 11, 2008 at 10:12 PM, Leonardo Uribe <[EMAIL PROTECTED]> wrote: > Hi > > Checking some tomahawk stuff I have noted that when I'm using trinidad (any > version 1.1 and 1.2) at the end of the form the hidden field that stores or > references the state: > > <input type="hidden" name="javax.faces.ViewState" > > never render its id="javax.faces.ViewState" as myfaces and jsf ri does. > > the api javadoc of ResponseStateManager.isPostback says this: > > *The implementation if this method for the Standard HTML RenderKit must > consult the > ExternalContext<http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/javax/faces/context/ExternalContext.html>'s > requestParameterMap and return true if and only if there is a key equal to > the value of the symbolic constant > VIEW_STATE_PARAM<http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/javax/faces/render/ResponseStateManager.html#VIEW_STATE_PARAM> > .* > > *For backwards compatability with implementations of > ResponseStateManagerprior to JSF 1.2, a default implementation is provided > that consults the > ExternalContext<http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/javax/faces/context/ExternalContext.html>'s > requestParameterMap and return true if its size is greater than 0.* > > Trinidad implements its own ResponseStateManager like this: > > public class CoreResponseStateManager extends ResponseStateManager > { > > /* ......code ....*/ > /** > * Write the state into the page. > * @todo Stream the resulting state into the page's content > * instead of buffering it. > * @todo Don't directly write out hidden input field; use an abstraction > */ > @Override > public void writeState( > FacesContext context, > StateManager.SerializedView serializedView) throws IOException > { > ResponseWriter rw = context.getResponseWriter(); > rw.startElement("input", null); > rw.writeAttribute("type", "hidden", null); > rw.writeAttribute("name", VIEW_STATE_PARAM, null); > // Don't write out the ID, as it can be written > // out twice > rw.writeAttribute("id", VIEW_STATE_PARAM, null); > > String s = encodeSerializedViewAsString(serializedView); > rw.writeAttribute("value", s, null); > > rw.endElement("input"); > } > > @Override > /** > * A request is a postback if it contains the state parameter. > */ > public boolean isPostback(FacesContext context) > { > Map requestParams = > context.getExternalContext().getRequestParameterMap(); > return requestParams.containsKey(VIEW_STATE_PARAM); > } > > On trinidad 1.1 the commented code that render its id is missing. > > The problem start when some code uses javax.faces.ViewState to find if the > request is a postback (trinidad has its own way to detect a postback using > another input field). If the id is missing, that code thinks that every > request is not a postback. > > The commented code says that the id is duplicated, but checking code > nothing suggest that this is happening. I tried state saving client or > server and no problems were found. > > I want to know if any developer has a reason to avoid render this id, and > if no objections I'll commit this change in 72 hours (doing this > s:inputSuggestAjax and s:tableSuggestAjax could work with trinidad and/or > facelets and solve TOMAHAWK-1157). > > Suggestions are welcome > > regards > > Leonardo Uribe > > >