📄 lifecycleimpl.java
字号:
* Update Model Values (JSF.2.2.4) * @return true, if response is complete */ private boolean updateModelValues(FacesContext facesContext) throws FacesException { if (log.isTraceEnabled()) log.trace("entering updateModelValues in " + LifecycleImpl.class.getName()); informPhaseListenersBefore(facesContext, PhaseId.UPDATE_MODEL_VALUES); facesContext.getViewRoot().processUpdates(facesContext); informPhaseListenersAfter(facesContext, PhaseId.UPDATE_MODEL_VALUES); if (facesContext.getResponseComplete()) { if (log.isDebugEnabled()) log.debug("exiting updateModelValues in " + LifecycleImpl.class.getName() + " (response complete)"); return true; } if (facesContext.getRenderResponse()) { if (log.isDebugEnabled()) log.debug("exiting updateModelValues in " + LifecycleImpl.class.getName() + " (--> render response)"); return true; } if (log.isTraceEnabled()) log.trace("exiting updateModelValues in " + LifecycleImpl.class.getName()); return false; } /** * Invoke Application (JSF.2.2.5) * @return true, if response is complete */ private boolean invokeApplication(FacesContext facesContext) throws FacesException { if (log.isTraceEnabled()) log.trace("entering invokeApplication in " + LifecycleImpl.class.getName()); informPhaseListenersBefore(facesContext, PhaseId.INVOKE_APPLICATION); facesContext.getViewRoot().processApplication(facesContext); informPhaseListenersAfter(facesContext, PhaseId.INVOKE_APPLICATION); if (facesContext.getResponseComplete()) { if (log.isDebugEnabled()) log.debug("exiting invokeApplication in " + LifecycleImpl.class.getName() + " (response complete)"); return true; } if (log.isTraceEnabled()) log.trace("exiting invokeApplication in " + LifecycleImpl.class.getName()); return false; } public void render(FacesContext facesContext) throws FacesException { if (log.isTraceEnabled()) log.trace("entering renderResponse in " + LifecycleImpl.class.getName()); if (facesContext.getResponseComplete()) { if (log.isDebugEnabled()) log.debug("exiting renderResponse in " + LifecycleImpl.class.getName() + " (response complete)"); return; } informPhaseListenersBefore(facesContext, PhaseId.RENDER_RESPONSE); Application application = facesContext.getApplication(); ViewHandler viewHandler = application.getViewHandler(); try { viewHandler.renderView(facesContext, facesContext.getViewRoot()); } catch (IOException e) { throw new FacesException(e.getMessage(), e); } informPhaseListenersAfter(facesContext, PhaseId.RENDER_RESPONSE); if (log.isTraceEnabled()) { //Note: DebugUtils Logger must also be in trace level DebugUtils.traceView("View after rendering"); } if (log.isTraceEnabled()) log.trace("exiting renderResponse in " + LifecycleImpl.class.getName()); } private static String deriveViewId(FacesContext facesContext) { ExternalContext externalContext = facesContext.getExternalContext(); if (PortletUtil.isPortletRequest(facesContext)) { PortletRequest request = (PortletRequest)externalContext.getRequest(); return request.getParameter(MyFacesGenericPortlet.VIEW_ID); } String viewId = externalContext.getRequestPathInfo(); //getPathInfo if (viewId == null) { //No extra path info found, so it is propably extension mapping viewId = externalContext.getRequestServletPath(); //getServletPath DebugUtils.assertError(viewId != null, log, "RequestServletPath is null, cannot determine viewId of current page."); //TODO: JSF Spec 2.2.1 - what do they mean by "if the default ViewHandler implementation is used..." ? String defaultSuffix = externalContext.getInitParameter(ViewHandler.DEFAULT_SUFFIX_PARAM_NAME); String suffix = defaultSuffix != null ? defaultSuffix : ViewHandler.DEFAULT_SUFFIX; DebugUtils.assertError(suffix.charAt(0) == '.', log, "Default suffix must start with a dot!"); int dot = viewId.lastIndexOf('.'); if (dot == -1) { log.error("Assumed extension mapping, but there is no extension in " + viewId); } else { viewId = viewId.substring(0, dot) + suffix; } } return viewId; } private static void recursivelyHandleComponentReferencesAndSetValid(FacesContext facesContext, UIComponent root) { for (Iterator it = root.getFacetsAndChildren(); it.hasNext(); ) { UIComponent component = (UIComponent)it.next(); ValueBinding binding = component.getValueBinding("binding"); //TODO: constant if (binding != null && !binding.isReadOnly(facesContext)) { binding.setValue(facesContext, component); } if (component instanceof UIInput) { ((UIInput)component).setValid(true); } recursivelyHandleComponentReferencesAndSetValid(facesContext, component); } } public void addPhaseListener(PhaseListener phaseListener) { if (_phaseListenerList == null) { _phaseListenerList = new ArrayList(); if (_phaseListenerArray != null) { _phaseListenerList.addAll(Arrays.asList(_phaseListenerArray)); _phaseListenerArray = null; } } _phaseListenerList.add(phaseListener); } public void removePhaseListener(PhaseListener phaseListener) { if (_phaseListenerList == null) { _phaseListenerList = new ArrayList(); if (_phaseListenerArray != null) { _phaseListenerList.addAll(Arrays.asList(_phaseListenerArray)); _phaseListenerArray = null; } } _phaseListenerList.remove(phaseListener); } public PhaseListener[] getPhaseListeners() { if (_phaseListenerArray == null) { if (_phaseListenerList == null) { _phaseListenerArray = new PhaseListener[0]; } else { _phaseListenerArray = (PhaseListener[])_phaseListenerList.toArray(new PhaseListener[_phaseListenerList.size()]); _phaseListenerList = null; } } return _phaseListenerArray; } private void informPhaseListenersBefore(FacesContext facesContext, PhaseId phaseId) { PhaseListener[] phaseListeners = getPhaseListeners(); for (int i = 0; i < phaseListeners.length; i++) { PhaseListener phaseListener = phaseListeners[i]; int listenerPhaseId = phaseListener.getPhaseId().getOrdinal(); if (listenerPhaseId == PhaseId.ANY_PHASE.getOrdinal() || listenerPhaseId == phaseId.getOrdinal()) { phaseListener.beforePhase(new PhaseEvent(facesContext, phaseId, this)); } } } private void informPhaseListenersAfter(FacesContext facesContext, PhaseId phaseId) { PhaseListener[] phaseListeners = getPhaseListeners(); for (int i = 0; i < phaseListeners.length; i++) { PhaseListener phaseListener = phaseListeners[i]; int listenerPhaseId = phaseListener.getPhaseId().getOrdinal(); if (listenerPhaseId == PhaseId.ANY_PHASE.getOrdinal() || listenerPhaseId == phaseId.getOrdinal()) { phaseListener.afterPhase(new PhaseEvent(facesContext, phaseId, this)); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -