@Override protected ModelAndView onSubmit( HttpServletRequest request, HttpServletResponse response, Object commandObject, BindException errors) throws Exception { FormEntrySession session = (FormEntrySession) commandObject; try { session.prepareForSubmit(); session.getSubmissionController().handleFormSubmission(session, request); if (session.getContext().getMode() == Mode.ENTER && (session.getSubmissionActions().getEncountersToCreate() == null || session.getSubmissionActions().getEncountersToCreate().size() == 0)) throw new IllegalArgumentException("This form is not going to create an encounter"); session.applyActions(); String successView = session.getReturnUrlWithParameters(); if (successView == null) successView = getSuccessView() + "?patientId=" + session.getPatient().getPersonId(); if (StringUtils.hasText(request.getParameter("closeAfterSubmission"))) { return new ModelAndView( closeDialogView, "dialogToClose", request.getParameter("closeAfterSubmission")); } else { return new ModelAndView(new RedirectView(successView)); } } catch (BadFormDesignException ex) { log.error("Bad Form Design:", ex); errors.reject(ex.getMessage()); return showForm(request, response, errors); } catch (Exception ex) { log.error("Exception trying to submit form", ex); StringWriter sw = new StringWriter(); ex.printStackTrace(new PrintWriter(sw)); errors.reject("Exception! " + ex.getMessage() + "<br/>" + sw.toString()); return showForm(request, response, errors); } }
/* * I'm using a return type of ModelAndView so I can use RedirectView rather than "redirect:" and preserve the fact that * returnUrl values from the pre-annotated-controller days will have the context path already */ @RequestMapping(method = RequestMethod.POST, value = FORM_PATH) public ModelAndView handleSubmit( @ModelAttribute("command") FormEntrySession session, Errors errors, HttpServletRequest request, Model model) throws Exception { try { List<FormSubmissionError> validationErrors = session.getSubmissionController().validateSubmission(session.getContext(), request); if (validationErrors != null && validationErrors.size() > 0) { errors.reject("Fix errors"); } } catch (Exception ex) { log.error("Exception during form validation", ex); errors.reject("Exception during form validation, see log for more details: " + ex); } if (errors.hasErrors()) { return new ModelAndView(FORM_PATH, "command", session); } // no form validation errors, proceed with submission session.prepareForSubmit(); if (session.getContext().getMode() == Mode.ENTER && session.hasPatientTag() && session.getPatient() == null && (session.getSubmissionActions().getPersonsToCreate() == null || session.getSubmissionActions().getPersonsToCreate().size() == 0)) throw new IllegalArgumentException("This form is not going to create an Patient"); if (session.getContext().getMode() == Mode.ENTER && session.hasEncouterTag() && (session.getSubmissionActions().getEncountersToCreate() == null || session.getSubmissionActions().getEncountersToCreate().size() == 0)) throw new IllegalArgumentException("This form is not going to create an encounter"); try { session.getSubmissionController().handleFormSubmission(session, request); session.applyActions(); String successView = session.getReturnUrlWithParameters(); if (successView == null) successView = request.getContextPath() + "/patientDashboard.form" + getQueryPrameters(request, session); if (StringUtils.hasText(request.getParameter("closeAfterSubmission"))) { return new ModelAndView( closeDialogView, "dialogToClose", request.getParameter("closeAfterSubmission")); } else { return new ModelAndView(new RedirectView(successView)); } } catch (ValidationException ex) { log.error("Invalid input:", ex); errors.reject(ex.getMessage()); } catch (BadFormDesignException ex) { log.error("Bad Form Design:", ex); errors.reject(ex.getMessage()); } catch (Exception ex) { log.error("Exception trying to submit form", ex); StringWriter sw = new StringWriter(); ex.printStackTrace(new PrintWriter(sw)); errors.reject("Exception! " + ex.getMessage() + "<br/>" + sw.toString()); } // if we get here it's because we caught an error trying to submit/apply return new ModelAndView(FORM_PATH, "command", session); }
protected String getQueryPrameters( HttpServletRequest request, FormEntrySession formEntrySession) { return "?patientId=" + formEntrySession.getPatient().getPersonId(); }
@RequestMapping(FORM_PATH) public ModelAndView handleRequest(HttpServletRequest request) { returnUrl = request.getContextPath() + "/module/patientnarratives/patientNarrativesForm.form"; HtmlFormEntryPortletController htmlFormEntryPortletController; FormEntrySession session = null; try { htmlFormEntryPortletController = new HtmlFormEntryPortletController(); session = htmlFormEntryPortletController.getFormEntrySession(request); List<FormSubmissionError> validationErrors = session.getSubmissionController().validateSubmission(session.getContext(), request); if (validationErrors != null && validationErrors.size() > 0) { // errors.reject("Fix errors"); } } catch (Exception ex) { log.error("Exception during form validation", ex); // errors.reject("Exception during form validation, see log for more details: " + ex); } // if (errors.hasErrors()) { // return new ModelAndView(FORM_PATH, "command", session); // } // no form validation errors, proceed with submission try { session.prepareForSubmit(); if (session.getContext().getMode() == FormEntryContext.Mode.ENTER && session.hasPatientTag() && session.getPatient() == null && (session.getSubmissionActions().getPersonsToCreate() == null || session.getSubmissionActions().getPersonsToCreate().size() == 0)) throw new IllegalArgumentException("This form is not going to create an Patient"); if (session.getContext().getMode() == FormEntryContext.Mode.ENTER && session.hasEncouterTag() && (session.getSubmissionActions().getEncountersToCreate() == null || session.getSubmissionActions().getEncountersToCreate().size() == 0)) throw new IllegalArgumentException("This form is not going to create an encounter"); session.getSubmissionController().handleFormSubmission(session, request); HtmlFormEntryUtil.getService().applyActions(session); String successView = session.getReturnUrlWithParameters(); request .getSession() .setAttribute( WebConstants.OPENMRS_MSG_ATTR, "patientnarratives.module.narrative.save.success"); if (successView == null) successView = request.getContextPath() + "/module/patientnarratives/patientNarrativesForm.form"; if (StringUtils.hasText(request.getParameter("closeAfterSubmission"))) { return new ModelAndView(new RedirectView(returnUrl)); // return new ModelAndView(closeDialogView, "dialogToClose", // request.getParameter("closeAfterSubmission")); } else { return new ModelAndView(new RedirectView(returnUrl)); // return new ModelAndView(new RedirectView(successView)); } } catch (ValidationException ex) { log.error("Invalid input:", ex); // errors.reject(ex.getMessage()); } catch (BadFormDesignException ex) { log.error("Bad Form Design:", ex); // errors.reject(ex.getMessage()); } catch (Exception ex) { log.error("Exception trying to submit form", ex); StringWriter sw = new StringWriter(); ex.printStackTrace(new PrintWriter(sw)); // errors.reject("Exception! " + ex.getMessage() + "<br/>" + sw.toString()); } // if ((alert != null) && (alert == true)) { // } // if we get here it's because we caught an error trying to submit/apply // return new ModelAndView(returnUrl, "command", session); return new ModelAndView(new RedirectView(returnUrl)); }