@Override public boolean isWriteStateAfterRenderViewRequired(FacesContext facesContext) { return getStateCache(facesContext).isWriteStateAfterRenderViewRequired(facesContext); }
@Override public boolean isWriteStateAfterRenderViewRequired(FacesContext facesContext) { return getStateCache(facesContext).isWriteStateAfterRenderViewRequired(facesContext); }
@Override public String getCryptographicallyStrongTokenFromSession(FacesContext context) { Map<String, Object> sessionMap = context.getExternalContext().getSessionMap(); String savedToken = (String) sessionMap.get(SESSION_TOKEN); if (savedToken == null) { savedToken = getStateCache(context).createCryptographicallyStrongTokenFromSession(context); sessionMap.put(SESSION_TOKEN, savedToken); } return savedToken; }
@Override public void saveState(FacesContext facesContext, Object state) { if (!facesContext.getViewRoot().isTransient()) { getStateCache(facesContext).saveSerializedView(facesContext, state); } }
@Override public Object getState(FacesContext facesContext, String viewId) { Object savedState = getSavedState(facesContext); if (savedState == null) { return null; } return getStateCache(facesContext).restoreSerializedView(facesContext, viewId, savedState); }
@Override public void saveState(FacesContext facesContext, Object state) { if (isHandlingStateCachingMechanics(facesContext)) { getStateCache(facesContext).saveSerializedView(facesContext, state); } else { //This is done outside } }
@Override public String getViewState(FacesContext facesContext, Object baseState) { // If the view is transient, baseState is null, so it should return null. // In this way, PartialViewContext will skip <update ...> section related // to view state (stateless view does not have state, so it does not need // to update the view state section). if (baseState == null) { return null; } if (facesContext.getViewRoot().isTransient()) { return null; } Object state = getStateCache(facesContext).saveSerializedView(facesContext, baseState); return getStateCache(facesContext).getStateTokenProcessor(facesContext).encode(facesContext, state); }
/** * Reconstructs the state from the "javax.faces.ViewState" request parameter. * * @param facesContext * the current FacesContext * * @return the reconstructed state, or <code>null</code> if there was no saved state */ private Object getSavedState(FacesContext facesContext) { Object encodedState = facesContext.getExternalContext().getRequestParameterMap().get(STANDARD_STATE_SAVING_PARAM); if(encodedState==null || (((String) encodedState).length() == 0)) { return null; } Object savedStateObject = getStateCache(facesContext).getStateTokenProcessor(facesContext) .decode(facesContext, (String)encodedState); return savedStateObject; }
@Override public boolean isStateless(FacesContext context, String viewId) { if (context.isPostback()) { String encodedState = context.getExternalContext().getRequestParameterMap().get(STANDARD_STATE_SAVING_PARAM); if(encodedState==null || (((String) encodedState).length() == 0)) { return false; } return getStateCache(context).getStateTokenProcessor(context).isStateless(context, encodedState); } else { // "... java.lang.IllegalStateException - if this method is invoked // and the statefulness of the preceding call to writeState( // javax.faces.context.FacesContext, java.lang.Object) cannot be determined. throw new IllegalStateException( "Cannot decide if the view is stateless or not, since the request is " + "not postback (no preceding writeState(...))."); } }
token = getStateCache(facesContext).encodeSerializedState(facesContext, state);
@Override public String getViewState(FacesContext facesContext, Object baseState) { if (baseState == null) { return null; } Object state = null; if (isHandlingStateCachingMechanics(facesContext)) { state = getStateCache(facesContext).saveSerializedView(facesContext, baseState); } else { state = baseState; } Object[] savedState = new Object[2]; if (state != null) { savedState[STATE_PARAM] = state; } savedState[VIEWID_PARAM] = facesContext.getViewRoot().getViewId(); return StateUtils.construct(savedState, facesContext.getExternalContext()); }
@Override public Object getState(FacesContext facesContext, String viewId) { Object[] savedState = getSavedState(facesContext); if (savedState == null) { return null; } if (isHandlingStateCachingMechanics(facesContext)) { return getStateCache(facesContext).restoreSerializedView(facesContext, viewId, savedState[STATE_PARAM]); } else { return savedState[STATE_PARAM]; } }
@Override public void writeState(FacesContext facesContext, Object state) throws IOException { ResponseWriter responseWriter = facesContext.getResponseWriter(); Object savedStateObject = null; if (!facesContext.getViewRoot().isTransient()) { // Only if the view is not transient needs to be saved savedStateObject = getStateCache(facesContext).encodeSerializedState(facesContext, state); } // write the view state field writeViewStateField(facesContext, responseWriter, savedStateObject); // renderKitId field writeRenderKitIdField(facesContext, responseWriter); // windowId field writeWindowIdField(facesContext, responseWriter); }
private void writeViewStateField(FacesContext facesContext, ResponseWriter responseWriter, Object savedState) throws IOException { String serializedState = getStateCache(facesContext).getStateTokenProcessor(facesContext) .encode(facesContext, savedState); ExternalContext extContext = facesContext.getExternalContext(); MyfacesConfig myfacesConfig = MyfacesConfig.getCurrentInstance(extContext); responseWriter.startElement(HTML.INPUT_ELEM, null); responseWriter.writeAttribute(HTML.TYPE_ATTR, HTML.INPUT_TYPE_HIDDEN, null); responseWriter.writeAttribute(HTML.NAME_ATTR, STANDARD_STATE_SAVING_PARAM, null); if (myfacesConfig.isRenderViewStateId()) { // responseWriter.writeAttribute(HTML.ID_ATTR, STANDARD_STATE_SAVING_PARAM, null); // JSF 2.2 if javax.faces.ViewState is used as the id, in portlet // case it will be duplicate ids and that not xml friendly. responseWriter.writeAttribute(HTML.ID_ATTR, HtmlResponseStateManager.generateUpdateViewStateId( facesContext), null); } responseWriter.writeAttribute(HTML.VALUE_ATTR, serializedState, null); if (this.isAutocompleteOffViewState(facesContext)) { responseWriter.writeAttribute(HTML.AUTOCOMPLETE_ATTR, "off", null); } responseWriter.endElement(HTML.INPUT_ELEM); }