public void render(FacesContext context) throws FacesException { if (context.getResponseComplete()) return; Application app = context.getApplication(); ViewHandler view = app.getViewHandler(); beforePhase(context, PhaseId.RENDER_RESPONSE); try { if (log.isLoggable(Level.FINER)) log.finer(context.getViewRoot() + " before render view"); view.renderView(context, context.getViewRoot()); } catch (java.io.IOException e) { if (sendError(context, "renderView", e)) return; throw new FacesException(e); } catch (RuntimeException e) { if (sendError(context, "renderView", e)) return; throw e; } finally { afterPhase(context, PhaseId.RENDER_RESPONSE); logMessages(context); } }
private void restoreView(FacesContext context) throws FacesException { Application app = context.getApplication(); if (app instanceof ApplicationImpl) ((ApplicationImpl) app).initRequest(); ViewHandler view = app.getViewHandler(); view.initView(context); UIViewRoot viewRoot = context.getViewRoot(); if (viewRoot != null) { ExternalContext extContext = context.getExternalContext(); viewRoot.setLocale(extContext.getRequestLocale()); doSetBindings(context.getELContext(), viewRoot); return; } String viewId = calculateViewId(context); String renderKitId = view.calculateRenderKitId(context); RenderKitFactory renderKitFactory = (RenderKitFactory) FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY); RenderKit renderKit = renderKitFactory.getRenderKit(context, renderKitId); ResponseStateManager stateManager = renderKit.getResponseStateManager(); if (stateManager.isPostback(context)) { viewRoot = view.restoreView(context, viewId); if (viewRoot != null) { doSetBindings(context.getELContext(), viewRoot); } else { // XXX: backward compat issues with ViewHandler and StateManager // throw new ViewExpiredException(L.l("{0} is an expired view", viewId)); context.renderResponse(); viewRoot = view.createView(context, viewId); context.setViewRoot(viewRoot); } context.setViewRoot(viewRoot); } else { context.renderResponse(); viewRoot = view.createView(context, viewId); context.setViewRoot(viewRoot); } }
private String calculateViewId(FacesContext context) { Map map = context.getExternalContext().getRequestMap(); String viewId = (String) map.get(RequestDispatcher.INCLUDE_PATH_INFO); if (viewId == null) viewId = context.getExternalContext().getRequestPathInfo(); if (viewId == null) viewId = (String) map.get(RequestDispatcher.INCLUDE_SERVLET_PATH); if (viewId == null) viewId = context.getExternalContext().getRequestServletPath(); return viewId; }
@Override public void afterPhase(PhaseEvent event) { FacesContext facesContext = event.getFacesContext(); ExternalContext externalContext = facesContext.getExternalContext(); HttpServletRequest request = (HttpServletRequest) externalContext.getRequest(); if (!request.getMethod().equals("POST")) { Map<?, ?> flashScope = (Map<?, ?>) facesContext .getApplication() .createValueBinding("#{flashScope}") .getValue(facesContext); flashScope.clear(); } }
private void logMessages(FacesContext context) { UIViewRoot root = context.getViewRoot(); String viewId = ""; if (root != null) viewId = root.getViewId(); Iterator<FacesMessage> iter = context.getMessages(); while (iter != null && iter.hasNext()) { FacesMessage msg = iter.next(); if (log.isLoggable(Level.FINE)) { if (msg.getDetail() != null) log.fine( viewId + " [ " + msg.getSeverity() + "] " + msg.getSummary() + " " + msg.getDetail()); else log.fine(viewId + " [ " + msg.getSeverity() + "] " + msg.getSummary()); } } }
protected void setProperties(UIComponent component) { super.setProperties(component); javax.faces.component.UISelectOne selectone = null; try { selectone = (javax.faces.component.UISelectOne) component; } catch (ClassCastException cce) { throw new IllegalStateException( "Component " + component.toString() + " not expected type. Expected: javax.faces.component.UISelectOne. Perhaps you're missing a tag?"); } if (converter != null) { if (!converter.isLiteralText()) { selectone.setValueExpression("converter", converter); } else { Converter conv = FacesContext.getCurrentInstance() .getApplication() .createConverter(converter.getExpressionString()); selectone.setConverter(conv); } } if (converterMessage != null) { selectone.setValueExpression("converterMessage", converterMessage); } if (immediate != null) { selectone.setValueExpression("immediate", immediate); } if (required != null) { selectone.setValueExpression("required", required); } if (requiredMessage != null) { selectone.setValueExpression("requiredMessage", requiredMessage); } if (validator != null) { selectone.addValidator(new MethodExpressionValidator(validator)); } if (validatorMessage != null) { selectone.setValueExpression("validatorMessage", validatorMessage); } if (value != null) { selectone.setValueExpression("value", value); } if (valueChangeListener != null) { selectone.addValueChangeListener( new MethodExpressionValueChangeListener(valueChangeListener)); } if (accesskey != null) { selectone.setValueExpression("accesskey", accesskey); } if (dir != null) { selectone.setValueExpression("dir", dir); } if (disabled != null) { selectone.setValueExpression("disabled", disabled); } if (disabledClass != null) { selectone.setValueExpression("disabledClass", disabledClass); } if (enabledClass != null) { selectone.setValueExpression("enabledClass", enabledClass); } if (label != null) { selectone.setValueExpression("label", label); } if (lang != null) { selectone.setValueExpression("lang", lang); } if (onblur != null) { selectone.setValueExpression("onblur", onblur); } if (onchange != null) { selectone.setValueExpression("onchange", onchange); } if (onclick != null) { selectone.setValueExpression("onclick", onclick); } if (ondblclick != null) { selectone.setValueExpression("ondblclick", ondblclick); } if (onfocus != null) { selectone.setValueExpression("onfocus", onfocus); } if (onkeydown != null) { selectone.setValueExpression("onkeydown", onkeydown); } if (onkeypress != null) { selectone.setValueExpression("onkeypress", onkeypress); } if (onkeyup != null) { selectone.setValueExpression("onkeyup", onkeyup); } if (onmousedown != null) { selectone.setValueExpression("onmousedown", onmousedown); } if (onmousemove != null) { selectone.setValueExpression("onmousemove", onmousemove); } if (onmouseout != null) { selectone.setValueExpression("onmouseout", onmouseout); } if (onmouseover != null) { selectone.setValueExpression("onmouseover", onmouseover); } if (onmouseup != null) { selectone.setValueExpression("onmouseup", onmouseup); } if (onselect != null) { selectone.setValueExpression("onselect", onselect); } if (readonly != null) { selectone.setValueExpression("readonly", readonly); } if (style != null) { selectone.setValueExpression("style", style); } if (styleClass != null) { selectone.setValueExpression("styleClass", styleClass); } if (tabindex != null) { selectone.setValueExpression("tabindex", tabindex); } if (title != null) { selectone.setValueExpression("title", title); } }
public void execute(FacesContext context) throws FacesException { boolean isFiner = log.isLoggable(Level.FINER); if (context.getResponseComplete() || context.getRenderResponse()) return; beforePhase(context, PhaseId.RESTORE_VIEW); try { if (isFiner) log.finer("JSF[] before restore view"); restoreView(context); } finally { afterPhase(context, PhaseId.RESTORE_VIEW); } if (context.getResponseComplete() || context.getRenderResponse()) return; UIViewRoot viewRoot = context.getViewRoot(); beforePhase(context, PhaseId.APPLY_REQUEST_VALUES); try { if (isFiner) log.finer(context.getViewRoot() + " before process decodes"); viewRoot.processDecodes(context); } catch (RuntimeException e) { log.log(Level.WARNING, e.toString(), e); } finally { afterPhase(context, PhaseId.APPLY_REQUEST_VALUES); } // // Process Validations (processValidators) // if (context.getResponseComplete() || context.getRenderResponse()) return; beforePhase(context, PhaseId.PROCESS_VALIDATIONS); try { if (isFiner) log.finer(context.getViewRoot() + " before process validators"); viewRoot.processValidators(context); } finally { afterPhase(context, PhaseId.PROCESS_VALIDATIONS); } // // Update Model Values (processUpdates) // if (context.getResponseComplete() || context.getRenderResponse()) return; beforePhase(context, PhaseId.UPDATE_MODEL_VALUES); try { if (isFiner) log.finer(context.getViewRoot() + " before process updates"); viewRoot.processUpdates(context); } catch (RuntimeException e) { if (sendError(context, "processUpdates", e)) return; } finally { afterPhase(context, PhaseId.UPDATE_MODEL_VALUES); } // // Invoke Application (processApplication) // if (context.getResponseComplete() || context.getRenderResponse()) return; beforePhase(context, PhaseId.INVOKE_APPLICATION); try { if (isFiner) log.finer(context.getViewRoot() + " before process application"); viewRoot.processApplication(context); } finally { afterPhase(context, PhaseId.INVOKE_APPLICATION); } }
private boolean sendError(FacesContext context, String lifecycle, Exception e) { for (Throwable cause = e; cause != null; cause = cause.getCause()) { if (cause instanceof DisplayableException) { if (e instanceof RuntimeException) throw (RuntimeException) e; else throw new FacesException(e); } else if (cause instanceof ServletException) throw new FacesException(e); else if (cause instanceof JspException) throw new FacesException(e); } ExternalContext extContext = context.getExternalContext(); Object response = extContext.getResponse(); if (!(response instanceof HttpServletResponse)) { context.renderResponse(); if (e instanceof RuntimeException) throw (RuntimeException) e; else throw new RuntimeException(e); } log.log(Level.WARNING, e.toString(), e); HttpServletResponse res = (HttpServletResponse) response; try { context.renderResponse(); context.responseComplete(); res.setStatus(500, "JSF Exception"); res.setContentType("text/html"); PrintWriter out = res.getWriter(); out.println("<body>"); out.println("<h3>JSF exception detected in " + lifecycle + " phase</h3>"); String msg = e.getMessage(); out.println("<span style='color:red;font:bold'>" + Html.escapeHtml(msg) + "</span><br/>"); out.println("<h3>Context: " + context.getViewRoot() + "</h3>"); out.println("<code><pre>"); String errorId = null; if (e instanceof FacesException && msg.startsWith("id=")) { int p = msg.indexOf(' '); errorId = msg.substring(3, p); } printComponentTree(out, errorId, context, context.getViewRoot(), 0); out.println("</pre></code>"); if (!Alarm.isTest()) { out.println("<h3>Stack Trace</h3>"); out.println("<pre>"); if (e.getCause() != null) e.getCause().printStackTrace(out); else e.printStackTrace(out); out.println("</pre>"); } out.println("</body>"); // clear, so we don't just loop Application app = context.getApplication(); ViewHandler view = app.getViewHandler(); UIViewRoot viewRoot = context.getViewRoot(); viewRoot = view.createView(context, viewRoot.getViewId()); context.setViewRoot(viewRoot); // view.writeState(context); // XXX: no need to output state, but review. return true; } catch (IOException e1) { throw new RuntimeException(e); } }