600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > java与java ee_Java EE MVC:处理表单验证

java与java ee_Java EE MVC:处理表单验证

时间:2020-07-11 14:19:12

相关推荐

java与java ee_Java EE MVC:处理表单验证

java与java ee

在本文中,我们将介绍Java EE MVC中的表单验证。

Java EE MVC与Java Bean验证API( JSR 303 )集成在一起,这使得添加验证约束变得非常容易。

使用JAX-RS方式进行验证

假设我们有一个小的html表单,可用于发送联系人消息。 为了表示表单数据,我们创建一个小的ContactMessage bean,其中包含表单字段和验证约束:

publicclassContactMessage{@FormParam("message")@NotBlank@Size(max=1000)privateStringmessage;//getters/setters}

在我们的MVC控制器中,我们使用@BeanParam批注将表单数据转换为ContactMessage对象:

@Controller@Path("/")publicclassContactController{@POSTpublicStringformSubmit(@Valid@BeanParamContactMessagemessage){...}}

(有关@BeanParam批注的更多详细信息,请参阅博客文章“使用bean参数” )。

通过将@Valid批注添加到ContactMessage参数,可以启用验证。 如果提交表单,并且ContactMessage对象的验证失败,则将引发ConstraintViolationException。 在这种情况下,不会调用controller方法。 相反,可以使用通用的JAX-RS ExceptionMapper处理异常,如另一篇文章中所示: Java EE MVC中的全局异常处理 。

这种方法通常适用于标准JAX-RS REST端点。 如果无效数据已传递到服务器,我们通常希望在这里返回通用的HTTP 400(错误请求)状态代码。

在MVC环境中,每当传递无效数据时,我们都可以使用此行为向用户呈现标准错误页面。 但是,这通常不够灵活。 通常,我们想返回一个更具体的页面,向用户显示错误消息。

使用@MvcBinding和BindingResult进行验证

Java EE MVC提供了@MvcBinding批注,该批注启用了替代的异常处理机制。 可以将@MvcBinding与JAX-RS绑定批注(例如@FormParam)一起放在字段和方法参数上:

publicclassContactMessage{@MvcBinding@FormParam("message")@NotBlank@Size(max=1000)privateStringmessage;//getters/setters}

如果注释字段的绑定失败,这将告诉Java EE MVC调用控制器方法而不是通用异常处理程序。 要访问绑定信息,我们可以将BindingResult对象注入到控制器类中:

@Controller@Path("/")publicclassContactController{@InjectprivateModelsmodels;@InjectprivateBindingResultbindingResult;@POSTpublicStringformSubmit(@Valid@BeanParamContactMessagemessage){if(bindingResult.isFailed()){models.put("bindingResult",bindingResult);return"/WEB-INF/jsp/contact.jsp";}return"/WEB-INF/jsp/success.jsp";}}

顾名思义,我们可以使用注入的BindingResult对象访问控制器方法中的绑定信息。 在此示例中,我们只需调用isFailed()来检查是否存在绑定问题。 通过将bindingResult添加到模型,我们稍后可以在视图中访问它以向用户显示错误消息。

在提交按钮下方显示所有验证错误的简单JSP视图如下所示:

<formaction="${mvc.contextPath}/contact"method="post"><label>Message:</label><textareaname="message"></textarea><br/><inputtype="submit"/><c:iftest="${bindingResult.isFailed()}"><p>Formvalidationfailed.Reasons:</p><ul><c:forEachitems="${bindingResult.allValidationErrors}"var="validationError"><li><c:outvalue="${validationError.paramName}:${validationError.message}"/></li></c:forEach></ul></c:if></form>

结论

使用Java EE MVC进行表单验证非常容易。 可以使用JSR 303 Bean验证批注将验证约束添加到Bean。 @MvcBinding允许我们在控制器方法中处理验证错误,而不是使用通用的ExceptionMappers。 BindingResult使我们可以访问验证信息。

与往常一样,您可以在GitHub上找到示例代码。

翻译自: //05/java-ee-mvc-handling-validation.html

java与java ee

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。