public ViewSelection makeRefreshSelection(RequestContext context) { String viewName = resolveViewName(context); if (!StringUtils.hasText(viewName)) { throw new IllegalStateException("Resolved application view name was empty; programmer error! -- " + "The expression that was evaluated against the request context was '" + getViewName() + "'"); } return createApplicationView(viewName, context); }
public ViewSelection makeEntrySelection(RequestContext context) { if (shouldRedirect(context)) { return FlowExecutionRedirect.INSTANCE; } else { return makeRefreshSelection(context); } }
public boolean isEntrySelectionRenderable(RequestContext context) { return !shouldRedirect(context); }
/** * Determine whether or not a redirect should be used to render the application view. * @param context the context * @return true or false */ protected boolean shouldRedirect(RequestContext context) { return context.getCurrentState() instanceof ViewState && (redirect || alwaysRedirectOnPause(context)); }
/** * Resolves the application view name from the request context. * @param context the context * @return the view name */ protected String resolveViewName(RequestContext context) { return (String) getViewName().evaluate(context, null); }
/** * Convert given encoded view into an appropriate view selector. * @param encodedView the encoded view selector * @return the view selector */ protected ViewSelector convertEncodedViewSelector(String encodedView) { if (encodedView.startsWith(REDIRECT_PREFIX)) { String viewName = encodedView.substring(REDIRECT_PREFIX.length()); Expression viewNameExpr = (Expression) fromStringTo(Expression.class).execute(viewName); // just show the application view using a redirect return new ApplicationViewSelector(viewNameExpr, true); } else if (encodedView.startsWith(EXTERNAL_REDIRECT_PREFIX)) { String externalUrl = encodedView.substring(EXTERNAL_REDIRECT_PREFIX.length()); Expression urlExpr = (Expression) fromStringTo(Expression.class).execute(externalUrl); return new ExternalRedirectSelector(urlExpr); } else if (encodedView.startsWith(FLOW_DEFINITION_REDIRECT_PREFIX)) { String flowRedirect = encodedView.substring(FLOW_DEFINITION_REDIRECT_PREFIX.length()); Expression redirectExpr = (Expression) fromStringTo(Expression.class).execute(flowRedirect); return new FlowDefinitionRedirectSelector(redirectExpr); } else if (encodedView.startsWith(BEAN_PREFIX)) { String id = encodedView.substring(BEAN_PREFIX.length()); return flowServiceLocator.getViewSelector(id); } else { Expression viewNameExpr = (Expression) fromStringTo(Expression.class).execute(encodedView); return new ApplicationViewSelector(viewNameExpr); } } }