protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { EventEntities entities = new EventEntities(); entities.setRequest(request); entities.setResponse(response); String actionName = request.getServletPath(); actionName = actionName.substring(1, actionName.indexOf(FWConstants.ACTION_SUFFIX)); FWAction action = FWConfigUtil.getAction(actionName); ApplicationExceptionUtil.checkNullPointerException( action, "Action name \"" + actionName + "\" is not configured."); String viewName = request.getParameter(FWConstants.VIEW_NAME_VALUE); BasicValidationUtil.validateData(request); Model[] models = ModelsCreator.createModelsForAction(actionName, request); ConversionErrors errors = ModelsPopulator.populateModels(actionName, request); if (errors.getConversionErrorList().size() > 0) { ServletUtil.preserveConversionErrors(request, errors); ServletUtil.gotoPage(entities, viewName + FWConstants.VIEW_SUFFIX, false); return; } if (action.getValidators() != null) { List<ActionValidationError> validations = new ArrayList<ActionValidationError>(); List<FWActionValidator> fWValidators = action.getValidators(); boolean callNext = true; for (int i = 0; i < fWValidators.size() && callNext; i++) { FWActionValidator fWValidator = fWValidators.get(i); ActionValidator validator = ActionValidatorFactory.getValidator(fWValidator.getType()); callNext = validator.validate(models, validations, entities); } if (validations.size() > 0) { ActionValidationErrors validationErrors = new ActionValidationErrors(validations); ServletUtil.preserveValidationErrors(request, validationErrors); ServletUtil.gotoPage(entities, viewName + FWConstants.VIEW_SUFFIX, false); return; } } ActionViewConnector connector = null; connector = ActionViewConnectorFactory.getActionViewConnector(request, true); connector.setAction(actionName); ActionHandler handler = (ActionHandler) ActionHandlerFactory.getActionHandler(action.getHandler()); AbstractProcessingTube processingTube = ProcessingTubeFactory.getProcessingTube(); try { String viewAfterAction = processingTube.processActionTube(handler, models, connector, entities); if (viewAfterAction != null) { viewName = viewAfterAction; } ServletUtil.gotoPage( entities, viewName + FWConstants.VIEW_SUFFIX, FWConfigUtil.isSendRedirect(actionName, viewName)); } catch (Exception ex) { FWException actionException = FWConfigUtil.getActionFWException(action, ex); ServletUtil.handleException(ex, actionException, connector, entities); } } catch (Exception exception) { throw new ServletException(exception); } }