/** * Renders the view by dispatching to the target JSP. */ @Override protected void renderView(final ActionRequest actionRequest, final String target) throws Exception { HttpServletRequest request = actionRequest.getHttpServletRequest(); HttpServletResponse response = actionRequest.getHttpServletResponse(); RequestDispatcher dispatcher = request.getRequestDispatcher(target); if (dispatcher == null) { response.sendError(SC_NOT_FOUND, "Result not found: " + target); // should never happened return; } // If we're included, then include the view, otherwise do forward. // This allow the page to, for example, set content type. if (DispatcherUtil.isPageIncluded(request, response)) { dispatcher.include(request, response); } else { dispatcher.forward(request, response); } }
@Override public Object intercept(final ActionRequest actionRequest) throws Exception { HttpServletRequest request = actionRequest.getHttpServletRequest(); // defines request bundle of this http request LocalizationUtil.setRequestBundleName(request, getActionClassName(actionRequest.getAction())); return actionRequest.invoke(); }
/** * Creates new action request. * @param actionPath action path * @param actionRuntime action runtime * @param action action object * @param servletRequest http request * @param servletResponse http response * @return action request */ protected ActionRequest createActionRequest( final String actionPath, final String[] actionPathChunks, final ActionRuntime actionRuntime, final Object action, final HttpServletRequest servletRequest, final HttpServletResponse servletResponse) { return new ActionRequest(this, actionPath, actionPathChunks, actionRuntime, action, servletRequest, servletResponse); }
/** * Prints out the message. User can override this method and modify the way * the message is printed. */ protected void printBefore(final ActionRequest request) { StringBuilder message = new StringBuilder(prefixIn); message.append(request.getActionPath()).append(" [").append(request.getActionRuntime().createActionString()).append(']'); out(message.toString()); }
@Override public Object intercept(final ActionRequest actionRequest) throws Exception { Object action = actionRequest.getAction(); Class actionType = action.getClass(); PropertyDescriptor[] allProperties = lookupAnnotatedProperties(actionType); for (PropertyDescriptor propertyDescriptor : allProperties) { onAnnotatedProperty(actionRequest, propertyDescriptor); } return actionRequest.invoke(); }
@Override public void render(final ActionRequest actionRequest, final String resultValue) throws Exception { HttpServletRequest request = actionRequest.getHttpServletRequest(); HttpServletResponse response = actionRequest.getHttpServletResponse(); Object action = actionRequest.getAction(); AppAction appAction = (AppAction) action; List<Violation> list = appAction.violations(); String result = VtorUtil.createViolationsJsonString(request, list); if (jsonResponseContentType != null) { response.setContentType(jsonResponseContentType); } char[] chars = result.toCharArray(); byte[] data = CharUtil.toByteArray(chars, madvocEncoding.getEncoding()); OutputStream os = response.getOutputStream(); os.write(data); os.flush(); }
final String resultBasePath = actionRequest.getActionRuntime().getResultBasePath(); HttpServletRequest request = actionRequest.getHttpServletRequest(); HttpServletResponse response = actionRequest.getHttpServletResponse(); path = beanTemplateParser.parseWithBean(path, actionRequest.getAction());
@Override public void inject(final ActionRequest actionRequest, final Targets targets) { final HttpServletRequest servletRequest = actionRequest.getHttpServletRequest(); inject(servletRequest.getServletContext(), targets); }
/** * Called when target not found. By default sends 404 to the response. */ protected void targetNotFound(final ActionRequest actionRequest, final String actionAndResultPath) throws IOException { final HttpServletResponse response = actionRequest.getHttpServletResponse(); if (!response.isCommitted()) { response.sendError(SC_NOT_FOUND, "Result not found: " + actionAndResultPath); } }
@Override public void render(final ActionRequest actionRequest, final Object resultValue) throws Exception { final HttpServletResponse response = actionRequest.getHttpServletResponse(); String key = actionRequest.getActionPath(); if (customPath != null) { key += ':' + customPath; if ((target = targetCache.get(key)) == null) { ResultPath resultPath = resultMapper.resolveResultPath(actionRequest.getActionPath(), customPath); ServletUtil.wrapToKeyValues(actionRequest.getHttpServletRequest(), response), response);
/** * {@inheritDoc} */ @Override public Object intercept(final ActionRequest actionRequest) throws Exception { HttpServletRequest servletRequest = actionRequest.getHttpServletRequest(); // detect multipart request if (ServletUtil.isMultipartRequest(servletRequest)) { servletRequest = new MultipartRequestWrapper(servletRequest, fileUploader.get(), madvocEncoding.getEncoding()); actionRequest.bind(servletRequest); } // do it inject(actionRequest); final Object result = actionRequest.invoke(); outject(actionRequest); return result; }
/** * Invokes an action asynchronously by submitting it to the thread pool. */ public void invoke(final ActionRequest actionRequest) { if (executorService == null) { throw new MadvocException("No action is marked as async!"); } final HttpServletRequest servletRequest = actionRequest.getHttpServletRequest(); log.debug(() -> "Async call to: " + actionRequest); final AsyncContext asyncContext = servletRequest.startAsync(); executorService.submit(() -> { try { actionRequest.invoke(); } catch (Exception ex) { log.error("Invoking async action path failed: " , ExceptionUtil.unwrapThrowable(ex)); } finally { asyncContext.complete(); } }); } }
@Override public Object intercept(ActionRequest actionRequest) throws Exception { ((MyActionRequest)actionRequest).data += "-I"+i; Object result = actionRequest.invoke(); ((MyActionRequest)actionRequest).data += "-i"+i; return result; } }
/** * {@inheritDoc} */ @Override public Object intercept(ActionRequest actionRequest) throws Exception { HttpServletRequest servletRequest = actionRequest.getHttpServletRequest(); // detect multipart request if (ServletUtil.isMultipartRequest(servletRequest)) { servletRequest = new MultipartRequestWrapper(servletRequest, madvocConfig.getFileUploadFactory(), madvocConfig.getEncoding()); actionRequest.setHttpServletRequest(servletRequest); } // do it inject(actionRequest); Object result = actionRequest.invoke(); outject(actionRequest); return result; }
/** * Injects IDs from request. Invoked before action request is invoked. */ protected void injectIdsFromRequest(ActionRequest actionRequest) { requestInjector.inject(actionRequest.getAction(), actionRequest.getHttpServletRequest()); }
/** * Redirects to the external location. */ @Override public void render(ActionRequest actionRequest, Object resultObject, String resultValue, String resultPath) throws Exception { resultValue = beanTemplateParser.parse(resultValue, actionRequest.getAction()); HttpServletResponse response = actionRequest.getHttpServletResponse(); response.sendRedirect(resultValue); }
/** * Performs injection. */ protected void inject(final ActionRequest actionRequest) { final Targets targets = actionRequest.getTargets(); final ServletContext servletContext = actionRequest.getHttpServletRequest().getServletContext(); scopeResolver.forEachScope(madvocScope -> madvocScope.inject(servletContext, targets)); scopeResolver.forEachScope(madvocScope -> madvocScope.inject(actionRequest, targets)); }
@Override public Object intercept(final ActionRequest actionRequest) throws Exception { final ActionRuntime actionRuntime = actionRequest.getActionRuntime(); if (actionRuntime.isAuthenticated()) { // action requires user to be authenticated T grantedAuthToken = authenticateUserViaHttpSession(actionRequest); if (grantedAuthToken == null) { grantedAuthToken = authenticateUserViaToken(actionRequest); } if (authenticateViaBasicAuth && grantedAuthToken == null) { grantedAuthToken = authenticateUserViaBasicAuth(actionRequest); } if (grantedAuthToken == null) { return JsonResult.of(return404instead401 ? HttpStatus.error404().notFound() : HttpStatus.error401().unauthorized("Not authorized")); } if (!authorized(actionRequest)) { return JsonResult.of(HttpStatus.error403().forbidden()); } } return actionRequest.invoke(); }
/** * Invokes a result after the action invocation. * <p> * Results may be objects that specify which action result will be used * to render the result. * <p> * Result value may consist of two parts: type and value. Result type is optional and, if exists, it is separated * by semi-colon from the value. If type is not specified * then the default result type if still not defined. Result type defines which * {@link ActionResult} should be used for rendering the value. * <p> * Result value is first checked against aliased values. Then, it is resolved and then passed * to the founded {@link ActionResult}. * * @see ActionResult#render(jodd.madvoc.ActionRequest, Object) */ @SuppressWarnings("unchecked") public void render(final ActionRequest actionRequest, final Object resultObject) throws Exception { final ActionResult actionResult = resultsManager.lookup(actionRequest, resultObject); if (actionResult == null) { throw new MadvocException("Action result not found"); } if (preventCaching) { ServletUtil.preventCaching(actionRequest.getHttpServletResponse()); } log.debug(() -> "Result type: " + actionResult.getClass().getSimpleName()); actionResult.render(actionRequest, actionRequest.getActionResult()); }
public Targets(final ActionRequest actionRequest) { targets = makeTargets( Target.ofValue(actionRequest.getAction(), actionRequest.getActionRuntime().getScopeData()), actionRequest.getActionRuntime().getMethodParams()); }