org.hibernate.validator.spi.resourceloading.ResourceBundleLocator#javax.validation.executable.ExecutableType源码实例Demo

下面列出了org.hibernate.validator.spi.resourceloading.ResourceBundleLocator#javax.validation.executable.ExecutableType 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

@CsrfProtected
@ServeResourceMethod(portletNames = { "portlet1" }, resourceID = "deleteFile")
@ValidateOnExecution(type = ExecutableType.NONE)
public void deleteFile(ResourceRequest resourceRequest, ResourceResponse resourceResponse) {

	PortletSession portletSession = resourceRequest.getPortletSession();

	List<Attachment> attachments = attachmentManager.getAttachments(portletSession.getId());

	ResourceParameters resourceParameters = resourceRequest.getResourceParameters();

	String attachmentIndex = resourceParameters.getValue(resourceResponse.getNamespace() + "attachmentIndex");

	if (attachmentIndex != null) {
		Attachment attachment = attachments.remove(Integer.valueOf(attachmentIndex).intValue());

		try {
			File file = attachment.getFile();
			file.delete();
			_writeTabularJSON(resourceResponse.getWriter(), attachments);
		}
		catch (IOException e) {
			logger.error(e.getMessage(), e);
		}
	}
}
 
@CsrfProtected
@ServeResourceMethod(portletNames = { "portlet1" }, resourceID = "deleteFile")
@ValidateOnExecution(type = ExecutableType.NONE)
public void deleteFile(ResourceRequest resourceRequest, ResourceResponse resourceResponse) {

	PortletSession portletSession = resourceRequest.getPortletSession();

	List<Attachment> attachments = attachmentManager.getAttachments(portletSession.getId());

	ResourceParameters resourceParameters = resourceRequest.getResourceParameters();

	String attachmentIndex = resourceParameters.getValue(resourceResponse.getNamespace() + "attachmentIndex");

	if (attachmentIndex != null) {
		Attachment attachment = attachments.remove(Integer.valueOf(attachmentIndex).intValue());

		try {
			File file = attachment.getFile();
			file.delete();
			_writeTabularJSON(resourceResponse.getWriter(), attachments);
		}
		catch (IOException e) {
			logger.error(e.getMessage(), e);
		}
	}
}
 
源代码3 项目: cxf   文件: AbstractValidationInterceptor.java
@Override
public void handleMessage(Message message) {
    final Object theServiceObject = getServiceObject(message);
    if (theServiceObject == null) {
        return;
    }

    final Method method = getServiceMethod(message);
    if (method == null) {
        return;
    }
    
    ValidateOnExecution validateOnExec = method.getAnnotation(ValidateOnExecution.class);
    if (validateOnExec != null) {
        ExecutableType[] execTypes = validateOnExec.type();
        if (execTypes.length == 1 && execTypes[0] == ExecutableType.NONE) {
            return;
        }
    }


    final List< Object > arguments = MessageContentsList.getContentsList(message);

    handleValidation(message, theServiceObject, method, arguments);

}
 
源代码4 项目: tomee   文件: PersonController.java
@POST
@Path("add")
@ValidateOnExecution(type = ExecutableType.NONE)
public String add(@Valid @BeanParam Person person) {
    if (bindingResult.isFailed()) {

        this.getErros();
        this.models.put("countries", getCountries());
        this.models.put("person", person);
        return "insert.jsp";

    }
    repository.save(person);
    message.setMessageRedirect("The " + person.getName() + " was successfully registered ! ");
    return "redirect:mvc/show";
}
 
源代码5 项目: tomee   文件: PersonController.java
@POST
@Path("update")
@ValidateOnExecution(type = ExecutableType.NONE)
public String update(@Valid @BeanParam Person person) {
    if (bindingResult.isFailed()) {

        this.getErros();
        this.models.put("countries", getCountries());
        this.models.put("person", person);
        return "change.jsp";

    }
    repository.save(person);
    message.setMessageRedirect("The " + person.getName() + " was changed successfully ! ");
    return "redirect:mvc/show";
}
 
源代码6 项目: tomee   文件: PersonController.java
@POST
@Path("add")
@ValidateOnExecution(type = ExecutableType.NONE)
public String add(@Valid @BeanParam Person person) {
    if (bindingResult.isFailed()) {

        this.getErros();
        this.models.put("countries", getCountries());
        this.models.put("person", person);
        return "insert.jsp";

    }
    repository.save(person);
    message.setMessageRedirect("The " + person.getName() + " was successfully registered ! ");
    return "redirect:mvc/show";
}
 
源代码7 项目: tomee   文件: PersonController.java
@POST
@Path("update")
@ValidateOnExecution(type = ExecutableType.NONE)
public String update(@Valid @BeanParam Person person) {
    if (bindingResult.isFailed()) {

        this.getErros();
        this.models.put("countries", getCountries());
        this.models.put("person", person);
        return "change.jsp";

    }
    repository.save(person);
    message.setMessageRedirect("The " + person.getName() + " was changed successfully ! ");
    return "redirect:mvc/show";
}
 
源代码8 项目: tomee   文件: BValInterceptor.java
private void initClassConfig(Class<?> targetClass) {
    if (classConfiguration == null) {
        synchronized (this) {
            if (classConfiguration == null) {
                final AnnotatedType<?> annotatedType = CDI.current().getBeanManager()
                        .createAnnotatedType(targetClass);

                if (annotatedType.isAnnotationPresent(ValidateOnExecution.class)) {
                    // implicit does not apply at the class level:
                    classConfiguration = ExecutableTypes.interpret(
                            removeFrom(Arrays.asList(annotatedType.getAnnotation(ValidateOnExecution.class).type()),
                                    ExecutableType.IMPLICIT));
                } else {
                    classConfiguration = globalConfiguration.getGlobalExecutableTypes();
                }
            }
        }
    }
}
 
源代码9 项目: tomee   文件: ValidatorBuilder.java
public OpenEjbBootstrapConfig(final String providerClassName,
                              final String constraintFactoryClass,
                              final String messageInterpolatorClass,
                              final String traversableResolverClass,
                              final String parameterNameProviderClass,
                              final Set<String> constraintMappings,
                              final boolean executableValidationEnabled,
                              final Set<ExecutableType> validatedTypes,
                              final Map<String, String> props,
                              final String clockProviderClassName,
                              final Set<String> valueExtractorClassNames) {
    this.providerClassName = providerClassName;
    this.constraintFactoryClass = constraintFactoryClass;
    this.messageInterpolatorClass = messageInterpolatorClass;
    this.traversableResolverClass = traversableResolverClass;
    this.parameterNameProviderClass = parameterNameProviderClass;
    this.constraintMappings = constraintMappings;
    this.executableValidationEnabled = executableValidationEnabled;
    this.validatedTypes = validatedTypes;
    this.props = props;
    this.clockProviderClassName = clockProviderClassName;
    this.valueExtractorClassNames = valueExtractorClassNames;
}
 
源代码10 项目: syndesis   文件: ValidatorContextResolver.java
@Override
public GeneralValidator getContext(final Class<?> type) {
    final ResourceBundleLocator resourceBundleLocator = new PlatformResourceBundleLocator("messages");
    final MessageInterpolator messageInterpolator = new ResourceBundleMessageInterpolator(resourceBundleLocator);
    final Configuration<?> config = Validation.byDefaultProvider().configure()
        .messageInterpolator(messageInterpolator);
    final BootstrapConfiguration bootstrapConfiguration = config.getBootstrapConfiguration();
    final boolean isExecutableValidationEnabled = bootstrapConfiguration.isExecutableValidationEnabled();
    final Set<ExecutableType> defaultValidatedExecutableTypes = bootstrapConfiguration
        .getDefaultValidatedExecutableTypes();

    return new GeneralValidatorImpl(validatorFactory, isExecutableValidationEnabled,
        defaultValidatedExecutableTypes);
}
 
源代码11 项目: ee8-sandbox   文件: TaskController.java
@POST
@CsrfProtected
@ValidateOnExecution(type = ExecutableType.NONE)
public Response save(@Valid @BeanParam TaskForm form) {
    log.log(Level.INFO, "saving new task @{0}", form);

    if (validationResult.isFailed()) {
        AlertMessage alert = AlertMessage.danger("Validation voilations!");
        validationResult.getAllErrors()
                .stream()
                .forEach((ParamError t) -> {
                    alert.addError(t.getParamName(), "", t.getMessage());
                });
        models.put("errors", alert);
        return Response.status(BAD_REQUEST).entity("add.jspx").build();
    }

    Task task = new Task();
    task.setName(form.getName());
    task.setDescription(form.getDescription());
    task.setDueDate(form.getDueDate());

    taskRepository.save(task);

    flashMessage.notify(Type.success, "Task was created successfully!");
    //models.put("flashMessage", flashMessage);

    return Response.ok("redirect:tasks").build();
}
 
源代码12 项目: ee8-sandbox   文件: TaskController.java
@POST
//@CsrfValid
@ValidateOnExecution(type = ExecutableType.NONE)
public Response save(@Valid @BeanParam TaskForm form) {
    log.log(Level.INFO, "saving new task @{0}", form);

    if (validationResult.isFailed()) {
        AlertMessage alert = AlertMessage.danger("Validation voilations!");
        validationResult.getAllErrors()
                .stream()
                .forEach((ParamError t) -> {
                    alert.addError(t.getParamName(), "", t.getMessage());
                });
        models.put("errors", alert);
        return Response.status(BAD_REQUEST).entity("add.xhtml").build();
    }

    Task task = new Task();
    task.setName(form.getName());
    task.setDescription(form.getDescription());

    taskRepository.save(task);

    flashMessage.notify(Type.success, "Task was created successfully!");
    //models.put("flashMessage", flashMessage);

    return Response.ok("redirect:tasks").build();
}
 
@RenderMethod(portletNames = { "portlet1" }, portletMode = "edit")
@ValidateOnExecution(type = ExecutableType.NONE)
@View("preferences.html")
public void prepareView(RenderRequest renderRequest, RenderResponse renderResponse) {

	Map<String, Object> modelsMap = models.asMap();

	if (!modelsMap.containsKey("preferences")) {
		models.put("preferences", new Preferences(portletPreferences.getValue("datePattern", null)));
	}

	// Thymeleaf
	models.put("mainFormActionURL", renderResponse.createActionURL());
}
 
@ActionMethod(portletName = "portlet1", actionName = "reset")
@ValidateOnExecution(type = ExecutableType.NONE)
@CsrfProtected
public void resetPreferences(ActionRequest actionRequest, ActionResponse actionResponse) {

	ResourceBundle resourceBundle = portletConfig.getResourceBundle(actionRequest.getLocale());

	try {

		Enumeration<String> preferenceNames = portletPreferences.getNames();

		while (preferenceNames.hasMoreElements()) {
			String preferenceName = preferenceNames.nextElement();

			if (!portletPreferences.isReadOnly(preferenceName)) {
				portletPreferences.reset(preferenceName);
			}
		}

		portletPreferences.store();
		actionResponse.setPortletMode(PortletMode.VIEW);
		actionResponse.setWindowState(WindowState.NORMAL);
		models.put("globalInfoMessage", resourceBundle.getString("your-request-processed-successfully"));
	}
	catch (Exception e) {

		models.put("globalErrorMessage", resourceBundle.getString("an-unexpected-error-occurred"));

		logger.error(e.getMessage(), e);
	}
}
 
@CsrfProtected
@ServeResourceMethod(portletNames = { "portlet1" }, resourceID = "uploadFiles")
@ValidateOnExecution(type = ExecutableType.NONE)
public void uploadFiles(ResourceRequest resourceRequest, ResourceResponse resourceResponse) {

	PortletSession portletSession = resourceRequest.getPortletSession(true);
	List<Attachment> attachments = attachmentManager.getAttachments(portletSession.getId());

	try {
		Collection<Part> transientMultipartFiles = resourceRequest.getParts();

		if (!transientMultipartFiles.isEmpty()) {

			File attachmentDir = attachmentManager.getAttachmentDir(portletSession.getId());

			if (!attachmentDir.exists()) {
				attachmentDir.mkdir();
			}

			for (Part transientMultipartFile : transientMultipartFiles) {

				String submittedFileName = transientMultipartFile.getSubmittedFileName();

				if (submittedFileName != null) {
					File copiedFile = new File(attachmentDir, submittedFileName);

					transientMultipartFile.write(copiedFile.getAbsolutePath());

					attachments.add(new Attachment(copiedFile));
				}
			}

			_writeTabularJSON(resourceResponse.getWriter(), attachments);
		}
	}
	catch (Exception e) {
		logger.error(e.getMessage(), e);
	}
}
 
@RenderMethod(portletNames = { "portlet1" }, portletMode = "edit")
@ValidateOnExecution(type = ExecutableType.NONE)
@View("preferences.jspx")
public void prepareView() {

	Map<String, Object> modelsMap = models.asMap();

	if (!modelsMap.containsKey("preferences")) {
		models.put("preferences", new Preferences(portletPreferences.getValue("datePattern", null)));
	}
}
 
源代码17 项目: portals-pluto   文件: ApplicantRenderController.java
@RenderMethod(portletNames = { "portlet1" })
@ValidateOnExecution(type = ExecutableType.NONE)
public String prepareView(RenderRequest renderRequest, RenderResponse renderResponse) {

	String viewName = viewEngineContext.getView();

	if (viewName == null) {

		viewName = "applicant.jspx";

		Applicant applicant = (Applicant) models.get("applicant");

		if (applicant == null) {
			applicant = new Applicant();
			models.put("applicant", applicant);
		}

		PortletSession portletSession = renderRequest.getPortletSession();
		List<Attachment> attachments = attachmentManager.getAttachments(portletSession.getId());
		applicant.setAttachments(attachments);

		String datePattern = portletPreferences.getValue("datePattern", null);

		models.put("jQueryDatePattern", _getJQueryDatePattern(datePattern));

		models.put("provinces", provinceService.getAllProvinces());

		CDI<Object> currentCDI = CDI.current();
		BeanManager beanManager = currentCDI.getBeanManager();
		Class<? extends BeanManager> beanManagerClass = beanManager.getClass();
		Package beanManagerPackage = beanManagerClass.getPackage();
		models.put("weldVersion", beanManagerPackage.getImplementationVersion());
	}

	return viewName;
}
 
@ActionMethod(portletName = "portlet1", actionName = "reset")
@ValidateOnExecution(type = ExecutableType.NONE)
@CsrfProtected
public void resetPreferences(ActionRequest actionRequest, ActionResponse actionResponse) {

	ResourceBundle resourceBundle = portletConfig.getResourceBundle(actionRequest.getLocale());

	try {

		Enumeration<String> preferenceNames = portletPreferences.getNames();

		while (preferenceNames.hasMoreElements()) {
			String preferenceName = preferenceNames.nextElement();

			if (!portletPreferences.isReadOnly(preferenceName)) {
				portletPreferences.reset(preferenceName);
			}
		}

		portletPreferences.store();
		actionResponse.setPortletMode(PortletMode.VIEW);
		actionResponse.setWindowState(WindowState.NORMAL);
		models.put("globalInfoMessage", resourceBundle.getString("your-request-processed-successfully"));
	}
	catch (Exception e) {

		models.put("globalErrorMessage", resourceBundle.getString("an-unexpected-error-occurred"));

		logger.error(e.getMessage(), e);
	}
}
 
@CsrfProtected
@ServeResourceMethod(portletNames = { "portlet1" }, resourceID = "uploadFiles")
@ValidateOnExecution(type = ExecutableType.NONE)
public void uploadFiles(ResourceRequest resourceRequest, ResourceResponse resourceResponse) {

	PortletSession portletSession = resourceRequest.getPortletSession(true);
	List<Attachment> attachments = attachmentManager.getAttachments(portletSession.getId());

	try {
		Collection<Part> transientMultipartFiles = resourceRequest.getParts();

		if (!transientMultipartFiles.isEmpty()) {

			File attachmentDir = attachmentManager.getAttachmentDir(portletSession.getId());

			if (!attachmentDir.exists()) {
				attachmentDir.mkdir();
			}

			for (Part transientMultipartFile : transientMultipartFiles) {

				String submittedFileName = transientMultipartFile.getSubmittedFileName();

				if (submittedFileName != null) {
					File copiedFile = new File(attachmentDir, submittedFileName);

					transientMultipartFile.write(copiedFile.getAbsolutePath());

					attachments.add(new Attachment(copiedFile));
				}
			}

			_writeTabularJSON(resourceResponse.getWriter(), attachments);
		}
	}
	catch (Exception e) {
		logger.error(e.getMessage(), e);
	}
}
 
源代码20 项目: tomee   文件: BValInterceptor.java
private static Collection<ExecutableType> removeFrom(Collection<ExecutableType> coll,
                                                     ExecutableType... executableTypes) {
    Validate.notNull(coll, "collection was null");
    if (!(coll.isEmpty() || ObjectUtils.isEmptyArray(executableTypes))) {
        final List<ExecutableType> toRemove = Arrays.asList(executableTypes);
        if (!Collections.disjoint(coll, toRemove)) {
            final Set<ExecutableType> result = EnumSet.copyOf(coll);
            result.removeAll(toRemove);
            return result;
        }
    }
    return coll;
}
 
源代码21 项目: tomee   文件: BValInterceptor.java
private <T> boolean computeIsConstructorValidated(Class<T> targetClass, Constructor<T> ctor) {
    final AnnotatedType<T> annotatedType =
            CDI.current().getBeanManager().createAnnotatedType(ctor.getDeclaringClass());

    final ValidateOnExecution annotation =
            annotatedType.getConstructors().stream().filter(ac -> ctor.equals(ac.getJavaMember())).findFirst()
                    .map(ac -> ac.getAnnotation(ValidateOnExecution.class))
                    .orElseGet(() -> ctor.getAnnotation(ValidateOnExecution.class));

    final Set<ExecutableType> validatedExecutableTypes =
            annotation == null ? classConfiguration : ExecutableTypes.interpret(annotation.type());

    return validatedExecutableTypes.contains(ExecutableType.CONSTRUCTORS);
}
 
源代码22 项目: tomee   文件: ValidatorBuilder.java
public static ValidationInfo getInfo(final ValidationConfigType config) {
    final ValidationInfo info = new ValidationInfo();
    if (config != null) {
        info.version = config.getVersion();
        info.providerClassName = config.getDefaultProvider();
        info.constraintFactoryClass = config.getConstraintValidatorFactory();
        info.traversableResolverClass = config.getTraversableResolver();
        info.messageInterpolatorClass = config.getMessageInterpolator();
        info.parameterNameProviderClass = config.getParameterNameProvider();
        info.valueExtractorClassNames = config.getValueExtractor();
        info.clockProviderClassName = config.getClockProvider();

        final ExecutableValidationType executableValidation = config.getExecutableValidation();
        if (executableValidation != null) {
            info.executableValidationEnabled = executableValidation.getEnabled();
            final DefaultValidatedExecutableTypesType executableTypes = executableValidation.getDefaultValidatedExecutableTypes();
            if (executableTypes != null) {
                for (final ExecutableType type : executableTypes.getExecutableType()) {
                    info.validatedTypes.add(type.name());
                }
            }
        }
        for (final PropertyType p : config.getProperty()) {
            info.propertyTypes.put(p.getName(), p.getValue());
        }
        info.constraintMappings.addAll(config.getConstraintMapping());
    }
    return info;
}
 
源代码23 项目: portals-pluto   文件: ApplicantRenderController.java
@RenderMethod(portletNames = { "portlet1" })
@ValidateOnExecution(type = ExecutableType.NONE)
public String prepareView(RenderRequest renderRequest, RenderResponse renderResponse) {

	String viewName = viewEngineContext.getView();

	if (viewName == null) {

		viewName = "applicant.html";

		Applicant applicant = (Applicant) models.get("applicant");

		if (applicant == null) {
			applicant = new Applicant();
			models.put("applicant", applicant);
		}

		PortletSession portletSession = renderRequest.getPortletSession();
		List<Attachment> attachments = attachmentManager.getAttachments(portletSession.getId());
		applicant.setAttachments(attachments);

		String datePattern = portletPreferences.getValue("datePattern", null);

		models.put("jQueryDatePattern", _getJQueryDatePattern(datePattern));

		models.put("provinces", provinceService.getAllProvinces());

		CDI<Object> currentCDI = CDI.current();
		BeanManager beanManager = currentCDI.getBeanManager();
		Class<? extends BeanManager> beanManagerClass = beanManager.getClass();
		Package beanManagerPackage = beanManagerClass.getPackage();
		models.put("weldVersion", beanManagerPackage.getImplementationVersion());

		// Thymeleaf
		models.put("autoFillResourceURL", ControllerUtil.createResourceURL(renderResponse, "autoFill"));
		models.put("deleteFileResourceURL", ControllerUtil.createResourceURL(renderResponse, "deleteFile"));
		models.put("mainFormActionURL", renderResponse.createActionURL());
		models.put("viewTermsResourceURL", ControllerUtil.createResourceURL(renderResponse, "viewTerms"));
		models.put("uploadFilesResourceURL", ControllerUtil.createResourceURL(renderResponse, "uploadFiles"));
	}

	return viewName;
}
 
源代码24 项目: cxf   文件: BookStoreWithValidation.java
@POST
@Path("/booksNoValidate")
@ValidateOnExecution(type = ExecutableType.NONE)
public Response addBookNoValidation(@NotNull @FormParam("id") String id) {
    return Response.ok().build();
}
 
源代码25 项目: cxf   文件: BookStoreWithValidation.java
@POST
@Path("/booksValidate")
@ValidateOnExecution(type = ExecutableType.IMPLICIT)
public Response addBookValidate(@NotNull @FormParam("id") String id) {
    return Response.ok().build();
}
 
源代码26 项目: tomee   文件: BValInterceptor.java
private <T> boolean computeIsMethodValidated(Class<T> targetClass, Method method) {
    final Signature signature = Signature.of(method);

    AnnotatedMethod<?> declaringMethod = null;

    for (final Class<?> c : Reflection.hierarchy(targetClass, Interfaces.INCLUDE)) {
        final AnnotatedType<?> annotatedType = CDI.current().getBeanManager().createAnnotatedType(c);

        final AnnotatedMethod<?> annotatedMethod = annotatedType.getMethods().stream()
                .filter(am -> Signature.of(am.getJavaMember()).equals(signature)).findFirst().orElse(null);

        if (annotatedMethod != null) {
            declaringMethod = annotatedMethod;
        }
    }
    if (declaringMethod == null) {
        return false;
    }
    final Collection<ExecutableType> declaredExecutableTypes;

    if (declaringMethod.isAnnotationPresent(ValidateOnExecution.class)) {
        final List<ExecutableType> validatedTypesOnMethod =
                Arrays.asList(declaringMethod.getAnnotation(ValidateOnExecution.class).type());

        // implicit directly on method -> early return:
        if (validatedTypesOnMethod.contains(ExecutableType.IMPLICIT)) {
            return true;
        }
        declaredExecutableTypes = validatedTypesOnMethod;
    } else {
        final AnnotatedType<?> declaringType = declaringMethod.getDeclaringType();
        if (declaringType.isAnnotationPresent(ValidateOnExecution.class)) {
            // IMPLICIT is meaningless at class level:
            declaredExecutableTypes =
                    removeFrom(Arrays.asList(declaringType.getAnnotation(ValidateOnExecution.class).type()),
                            ExecutableType.IMPLICIT);
        } else {
            final Package pkg = declaringType.getJavaClass().getPackage();
            if (pkg != null && pkg.isAnnotationPresent(ValidateOnExecution.class)) {
                // presumably IMPLICIT is likewise meaningless at package level:
                declaredExecutableTypes = removeFrom(
                        Arrays.asList(pkg.getAnnotation(ValidateOnExecution.class).type()), ExecutableType.IMPLICIT);
            } else {
                declaredExecutableTypes = null;
            }
        }
    }
    final ExecutableType methodType =
            Methods.isGetter(method) ? ExecutableType.GETTER_METHODS : ExecutableType.NON_GETTER_METHODS;

    return Optional.ofNullable(declaredExecutableTypes).map(ExecutableTypes::interpret)
            .orElse(globalConfiguration.getGlobalExecutableTypes()).contains(methodType);
}
 
源代码27 项目: tomee   文件: Adapter1.java
public ExecutableType unmarshal(String value) {
    return (javax.validation.executable.ExecutableType.valueOf(value));
}
 
源代码28 项目: tomee   文件: Adapter1.java
public String marshal(ExecutableType value) {
    if (value == null) {
        return null;
    }
    return value.toString();
}
 
源代码29 项目: tomee   文件: ValidatorBuilder.java
@Override
public Set<ExecutableType> getDefaultValidatedExecutableTypes() {
    return validatedTypes;
}
 
源代码30 项目: portals-pluto   文件: UserRenderController.java
@RenderMethod(portletNames = {"portlet1"})
@ValidateOnExecution(type = ExecutableType.NONE)
public String prepareView(RenderRequest renderRequest, RenderResponse renderResponse) {

	String viewName = viewEngineContext.getView();

	if (viewName == null) {

		viewName = "user.html";

		User user = (User) models.get("user");

		if (user == null) {
			user = new User();
			models.put("user", user);
		}

		ActionURL actionURL = renderResponse.createActionURL();
		MutableActionParameters actionParameters = actionURL.getActionParameters();
		actionParameters.setValue(ActionRequest.ACTION_NAME, "submitUser");

		models.put("submitUserActionURL", actionURL.toString());
	}

	logger.debug("[RENDER_PHASE] prepared model for viewName: {}", viewName);

	return viewName;
}