checkForDuplicateIds(facesContext, facesContext.getViewRoot(), new HashSet<String>()); Object treeStruct = getTreeStructureToSave(facesContext); Object compStates = getComponentStateToSave(facesContext); serializedView = new Object[] {treeStruct, compStates}; externalContext.getRequestMap().put(SERIALIZED_VIEW_REQUEST_ATTR, if (!isSavingStateInClient(facesContext)) saveSerializedViewInServletSession(facesContext, serializedView);
private static void checkForDuplicateIds(FacesContext context, UIComponent component, Set<String> ids) { String id = component.getId(); if (id != null && !ids.add(id)) { throw new IllegalStateException("Client-id : "+id + " is duplicated in the faces tree. Component : "+component.getClientId(context)+", path: "+ getPathToComponent(component)); } Iterator it = component.getFacetsAndChildren(); boolean namingContainer = component instanceof NamingContainer; while (it.hasNext()) { UIComponent kid = (UIComponent) it.next(); if (namingContainer) { checkForDuplicateIds(context, kid, new HashSet<String>()); } else { checkForDuplicateIds(context, kid, ids); } } }
if(isSerializeStateInSession(context)) if(isCompressStateInSession(context))
public UIViewRoot restoreView(FacesContext facesContext, String viewId, String renderKitId) { if (log.isTraceEnabled()) log.trace("Entering restoreView - viewId: "+viewId+" ; renderKitId: "+renderKitId); RenderKit renderKit = getRenderKitFactory().getRenderKit(facesContext, renderKitId); ResponseStateManager responseStateManager = renderKit.getResponseStateManager(); Object state; if (isSavingStateInClient(facesContext)) { if (log.isTraceEnabled()) log.trace("Restoring view from client"); state = responseStateManager.getState(facesContext, viewId); } else { if (log.isTraceEnabled()) log.trace("Restoring view from session"); Integer serverStateId = getServerStateId((Object[]) responseStateManager.getState(facesContext, viewId)); state = getSerializedViewFromServletSession(facesContext, viewId, serverStateId); } UIViewRoot uiViewRoot = null; if (state != null) { Object[] stateArray = (Object[])state; TreeStructureManager tsm = new TreeStructureManager(); uiViewRoot = tsm.restoreTreeStructure(stateArray[0]); if (uiViewRoot != null) { uiViewRoot.processRestoreState(facesContext, stateArray[1]); } } if (log.isTraceEnabled()) log.trace("Exiting restoreView - "+viewId); return uiViewRoot; }
@Override public void writeState(FacesContext facesContext, SerializedView serializedView) throws IOException { if (log.isLoggable(Level.FINEST)) log.finest("Entering writeState"); UIViewRoot uiViewRoot = facesContext.getViewRoot(); //save state in response (client) RenderKit renderKit = getRenderKitFactory().getRenderKit(facesContext, uiViewRoot.getRenderKitId()); ResponseStateManager responseStateManager = renderKit.getResponseStateManager(); if (isLegacyResponseStateManager(responseStateManager)) { responseStateManager.writeState(facesContext, serializedView); } else if (!isSavingStateInClient(facesContext)) { Object[] state = new Object[2]; state[JSF_SEQUENCE_INDEX] = Integer.toString(getNextViewSequence(facesContext), Character.MAX_RADIX); responseStateManager.writeState(facesContext, state); } else { Object[] state = new Object[2]; state[0] = serializedView.getStructure(); state[1] = serializedView.getState(); responseStateManager.writeState(facesContext, state); } if (log.isLoggable(Level.FINEST)) log.finest("Exiting writeState"); }
@Override public String getViewState(FacesContext facesContext) { UIViewRoot uiViewRoot = facesContext.getViewRoot(); String viewId = uiViewRoot.getViewId(); ViewDeclarationLanguage vdl = facesContext.getApplication().getViewHandler().getViewDeclarationLanguage(facesContext,viewId); if (vdl != null) { StateManagementStrategy sms = vdl.getStateManagementStrategy(facesContext, viewId); if (sms != null) { if (log.isLoggable(Level.FINEST)) log.finest("Calling saveView of StateManagementStrategy from getViewState: "+sms.getClass().getName()); return facesContext.getRenderKit().getResponseStateManager().getViewState(facesContext, saveView(facesContext)); } } Object[] savedState = (Object[]) saveView(facesContext); if (!isSavingStateInClient(facesContext)) { Object[] state = new Object[2]; state[JSF_SEQUENCE_INDEX] = Integer.toString(getNextViewSequence(facesContext), Character.MAX_RADIX); return facesContext.getRenderKit().getResponseStateManager().getViewState(facesContext, state); } else { return facesContext.getRenderKit().getResponseStateManager().getViewState(facesContext, savedState); } }
/** * MyFaces extension * @param facesContext * @param serializedView * @throws IOException */ public void writeStateAsUrlParams(FacesContext facesContext, SerializedView serializedView) throws IOException { if (log.isTraceEnabled()) log.trace("Entering writeStateAsUrlParams"); if (isSavingStateInClient(facesContext)) { if (log.isTraceEnabled()) log.trace("Processing writeStateAsUrlParams - client-side state saving writing state"); UIViewRoot uiViewRoot = facesContext.getViewRoot(); //save state in response (client) RenderKit renderKit = getRenderKitFactory().getRenderKit(facesContext, uiViewRoot.getRenderKitId()); ResponseStateManager responseStateManager = renderKit.getResponseStateManager(); if (responseStateManager instanceof MyfacesResponseStateManager) { ((MyfacesResponseStateManager)responseStateManager).writeStateAsUrlParams(facesContext, serializedView); } else { log.error("ResponseStateManager of render kit " + uiViewRoot.getRenderKitId() + " is no MyfacesResponseStateManager and does not support saving state in url parameters."); } } if (log.isTraceEnabled()) log.trace("Exiting writeStateAsUrlParams"); }
if (state != null) serializedView = deserializeView(state); nextViewSequence(context);
private static String getPathToComponent(UIComponent component) { StringBuffer buf = new StringBuffer(); if(component == null) { buf.append("{Component-Path : "); buf.append("[null]}"); return buf.toString(); } getPathToComponent(component,buf); buf.insert(0,"{Component-Path : "); buf.append("}"); return buf.toString(); }
RenderKit rk = getRenderKitFactory().getRenderKit(facesContext, renderKitId); ResponseStateManager responseStateManager = rk.getResponseStateManager(); if (isSavingStateInClient(facesContext)) Integer serverStateId = getServerStateId((Object[]) responseStateManager.getState(facesContext, viewId)); Object[] stateObj = (Object[])( (serverStateId == null)? null : getSerializedViewFromServletSession(facesContext, viewId, serverStateId) ); if (stateObj == null)
public void writeState(FacesContext facesContext, SerializedView serializedView) throws IOException { if (log.isTraceEnabled()) log.trace("Entering writeState"); UIViewRoot uiViewRoot = facesContext.getViewRoot(); //save state in response (client) RenderKit renderKit = getRenderKitFactory().getRenderKit(facesContext, uiViewRoot.getRenderKitId()); ResponseStateManager responseStateManager = renderKit.getResponseStateManager(); if (isLegacyResponseStateManager(responseStateManager)) { responseStateManager.writeState(facesContext, serializedView); } else if (!isSavingStateInClient(facesContext)) { Object[] state = new Object[2]; state[JSF_SEQUENCE_INDEX] = Integer.toString(getNextViewSequence(facesContext), Character.MAX_RADIX); responseStateManager.writeState(facesContext, state); } else { Object[] state = new Object[2]; state[0] = serializedView.getStructure(); state[1] = serializedView.getState(); responseStateManager.writeState(facesContext, state); } if (log.isTraceEnabled()) log.trace("Exiting writeState"); }
@Override public String getViewState(FacesContext facesContext) { UIViewRoot uiViewRoot = facesContext.getViewRoot(); String viewId = uiViewRoot.getViewId(); ViewDeclarationLanguage vdl = facesContext.getApplication().getViewHandler().getViewDeclarationLanguage(facesContext,viewId); if (vdl != null) { StateManagementStrategy sms = vdl.getStateManagementStrategy(facesContext, viewId); if (sms != null) { if (log.isLoggable(Level.FINEST)) log.finest("Calling saveView of StateManagementStrategy from getViewState: "+sms.getClass().getName()); return facesContext.getRenderKit().getResponseStateManager().getViewState(facesContext, saveView(facesContext)); } } Object[] savedState = (Object[]) saveView(facesContext); if (!isSavingStateInClient(facesContext)) { Object[] state = new Object[2]; state[JSF_SEQUENCE_INDEX] = Integer.toString(getNextViewSequence(facesContext), Character.MAX_RADIX); return facesContext.getRenderKit().getResponseStateManager().getViewState(facesContext, state); } else { return facesContext.getRenderKit().getResponseStateManager().getViewState(facesContext, savedState); } }
/** * MyFaces extension * @param facesContext * @param serializedView * @throws IOException */ @Override public void writeStateAsUrlParams(FacesContext facesContext, SerializedView serializedView) throws IOException { if (log.isLoggable(Level.FINEST)) log.finest("Entering writeStateAsUrlParams"); if (isSavingStateInClient(facesContext)) { if (log.isLoggable(Level.FINEST)) log.finest("Processing writeStateAsUrlParams - client-side state saving writing state"); UIViewRoot uiViewRoot = facesContext.getViewRoot(); //save state in response (client) RenderKit renderKit = getRenderKitFactory().getRenderKit(facesContext, uiViewRoot.getRenderKitId()); ResponseStateManager responseStateManager = renderKit.getResponseStateManager(); if (responseStateManager instanceof MyfacesResponseStateManager) { ((MyfacesResponseStateManager)responseStateManager).writeStateAsUrlParams(facesContext, serializedView); } else { log.severe("ResponseStateManager of render kit " + uiViewRoot.getRenderKitId() + " is no MyfacesResponseStateManager and does not support saving state in url parameters."); } } if (log.isLoggable(Level.FINEST)) log.finest("Exiting writeStateAsUrlParams"); }
if (state != null) serializedView = deserializeView(state); nextViewSequence(context);
private static String getPathToComponent(UIComponent component) { StringBuffer buf = new StringBuffer(); if(component == null) { buf.append("{Component-Path : "); buf.append("[null]}"); return buf.toString(); } getPathToComponent(component,buf); buf.insert(0,"{Component-Path : "); buf.append("}"); return buf.toString(); }
RenderKit rk = getRenderKitFactory().getRenderKit(facesContext, renderKitId); ResponseStateManager responseStateManager = rk.getResponseStateManager(); if (isSavingStateInClient(facesContext)) Integer serverStateId = getServerStateId((Object[]) responseStateManager.getState(facesContext, viewId)); Object[] stateObj = (Object[]) getSerializedViewFromServletSession(facesContext, viewId, serverStateId); if (stateObj == null)
checkForDuplicateIds(facesContext, facesContext.getViewRoot(), new HashSet<String>()); Object treeStruct = getTreeStructureToSave(facesContext); Object compStates = getComponentStateToSave(facesContext); serializedView = new Object[] {treeStruct, compStates}; externalContext.getRequestMap().put(SERIALIZED_VIEW_REQUEST_ATTR, if (!isSavingStateInClient(facesContext)) saveSerializedViewInServletSession(facesContext, serializedView);
@Override public void writeState(FacesContext facesContext, SerializedView serializedView) throws IOException { if (log.isLoggable(Level.FINEST)) log.finest("Entering writeState"); UIViewRoot uiViewRoot = facesContext.getViewRoot(); //save state in response (client) RenderKit renderKit = getRenderKitFactory().getRenderKit(facesContext, uiViewRoot.getRenderKitId()); ResponseStateManager responseStateManager = renderKit.getResponseStateManager(); if (isLegacyResponseStateManager(responseStateManager)) { responseStateManager.writeState(facesContext, serializedView); } else if (!isSavingStateInClient(facesContext)) { Object[] state = new Object[2]; state[JSF_SEQUENCE_INDEX] = Integer.toString(getNextViewSequence(facesContext), Character.MAX_RADIX); responseStateManager.writeState(facesContext, state); } else { Object[] state = new Object[2]; state[0] = serializedView.getStructure(); state[1] = serializedView.getState(); responseStateManager.writeState(facesContext, state); } if (log.isLoggable(Level.FINEST)) log.finest("Exiting writeState"); }
private static void checkForDuplicateIds(FacesContext context, UIComponent component, Set<String> ids) { String id = component.getId(); if (id != null && !ids.add(id)) { throw new IllegalStateException("Client-id : " + id + " is duplicated in the faces tree. Component : " + component.getClientId(context)+", path: " + getPathToComponent(component)); } if (component instanceof NamingContainer) { ids = new HashSet<String>(); } Iterator<UIComponent> it = component.getFacetsAndChildren(); while (it.hasNext()) { UIComponent kid = it.next(); checkForDuplicateIds(context, kid, ids); } }
/** * MyFaces extension * @param facesContext * @param serializedView * @throws IOException */ @Override public void writeStateAsUrlParams(FacesContext facesContext, SerializedView serializedView) throws IOException { if (log.isLoggable(Level.FINEST)) log.finest("Entering writeStateAsUrlParams"); if (isSavingStateInClient(facesContext)) { if (log.isLoggable(Level.FINEST)) log.finest("Processing writeStateAsUrlParams - client-side state saving writing state"); UIViewRoot uiViewRoot = facesContext.getViewRoot(); //save state in response (client) RenderKit renderKit = getRenderKitFactory().getRenderKit(facesContext, uiViewRoot.getRenderKitId()); ResponseStateManager responseStateManager = renderKit.getResponseStateManager(); if (responseStateManager instanceof MyfacesResponseStateManager) { ((MyfacesResponseStateManager)responseStateManager).writeStateAsUrlParams(facesContext, serializedView); } else { log.severe("ResponseStateManager of render kit " + uiViewRoot.getRenderKitId() + " is no MyfacesResponseStateManager and does not support saving state in url parameters."); } } if (log.isLoggable(Level.FINEST)) log.finest("Exiting writeStateAsUrlParams"); }