English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
تحقق Spring MVC يُستخدم للحد من المدخلات المقدمة من المستخدم. من أجل التحقق من مدخلات المستخدم، يدعم Spring 4 أو أحدث إصداراته API التحقق من الحالات ويستخدمها. يمكنه التحقق من تطبيقات الخادم والعميل.
API التحقق من الحالات هي معيار Java يمكن استخدامه لتطبيق القيود على نموذج الأشياء من خلال التعليقات. هنا، يمكننا التحقق من الطول، الأرقام، التعبيرات العادية وما إلى ذلك. بالإضافة إلى ذلك، يمكننا تقديم التحقق المخصص.
بما أن API التحقق من الحالات هو مجرد معيار، لذلك يتطلب تنفيذًا. لهذا السبب، يستخدم Hibernate Validator. Hibernate Validator متوافق تمامًا مع JSR-303/309، مما يسمح بوصف وتحقق القيود التطبيقية.
لنلقي نظرة على بعض التعليقات التحققية الشائعة.
التعليق | الشرح |
@NotNull | يحدد أن القيمة لا يجب أن تكون فارغة. |
@Min | يحدد أن الرقم يجب أن يكون مساوياً أو أكبر من القيمة المحددة. |
@Max | يحدد أن الرقم يجب أن يكون مساوياً أو أقل من القيمة المحددة. |
@Size | يحدد أن الحجم يجب أن يكون مساوياً للقيمة المحددة. |
@Pattern | يحدد ما إذا كانت السلسلة تتبع النمط النصي المحدد. |
في هذا المثال، قمنا بإنشاء نموذج بسيط يحتوي على حقل إدخال. هنا، (*) يعني أن الحقل يجب أن يتم إدخال القيمة المطلوبة. وإلا فإن النموذج سيكون لديه خطأ.
pom.xml
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.1.1.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jasper --> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jasper</artifactId> <version>9.0.12</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>3.0-alpha-1</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet/jstl --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator --> <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.13.Final</version> </dependency>
Employee.java
package com.w3codebox; import javax.validation.constraints.Size; public class Employee { private String name; @Size(min=1, message="required") private String pass; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } }
في فئة المحكم:
@Validالتعليقات تطبيق قواعد التحقق على العنصر المقدم. BindingResult الواجهة تحتوي على نتائج التحقق.
package com.w3codebox; import javax.validation.Valid; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class EmployeeController { @RequestMapping("/hello") public String display(Model m) { m.addAttribute("emp", new Employee()); return "viewpage"; } @RequestMapping("/helloagain") public String submitForm(@Valid @ModelAttribute("emp") Employee e, BindingResult br) { if(br.hasErrors()) { return "viewpage"; } else { return "final"; } } }
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>SpringMVC</display-name> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
spring-servlet.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- Provide support for component scanning --> <context:component-scan base-package="com.w3codebox" /> <!--Provide support for conversion, formatting and validation --> <mvc:annotation-driven/> <!-- Define Spring MVC view resolver --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans>
index.jsp
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> <html> <body> <a href="hello">انقر هنا...</a> </body> </html>
viewpage.jsp
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> <html> <head> <style> .error{color:red} </style> </head> <body> <form:form action="helloagain" modelAttribute="emp"> اسم المستخدم: <form:input path="name"/> <br><br> كلمة المرور(*): <form:password path="pass"/> <form:errors path="pass" cssClass="error"/><br><br> <input type="submit" value="submit"> </form:form> </body> </html>
final.jsp
<html> <body> اسم المستخدم: ${emp.name} <br><br> كلمة المرور: ${emp.pass} </body> </html>
الإخراج:
لنقوم بتقديم النموذج دون إدخال كلمة المرور.
الآن، نكتب كلمة المرور ونقوم بتقديم النموذج.