English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تحقق مخصص لـ Spring MVC

يسمح لنا إطار Spring MVC بتنفيذ التحقق المخصص. في هذه الحالة، نعلن عن تعليقاتنا الخاصة. يمكننا تنفيذ التحقق بناءً على منطق أعمالنا.

مثال التحقق المخصص لـ Spring MVC

في هذا المثال، نستخدم التعليقات المسبقة التحديد والتعليقات المخصصة لتحقق من إدخالات المستخدم.

1、أضف بنود الاعتماد إلى ملف pom.xml.

pom.xml

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>سبرينغ-ويب-مسيفر</artifactId>
    <version>5.1.1.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jasper -->
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>تومكات-جايسير</artifactId>
    <version>9.0.12</version>
</dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>  
    <groupId>javax.servlet</groupId>  
    <artifactId>سلفير-آبي</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>

2、创建bean类

Employee.java

package com.w3codebox;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import com.w3codebox.customvalidation.Password;
public class Employee {
    private String name;
    //Custom annotation
    @Password
    private String password;
    //Predefined annotation
    @Min(value=18, message="must be equal or greater than 18")
    @Max(value=45, message="must be equal or less than 45")
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }   
}

3- إنشاء فئة التحكم

EmployeeController.java

 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 showForm(Model theModel) {
        
        theModel.addAttribute("emp", new Employee());
        
        return "viewpage";
    }
    
    @RequestMapping("/helloagain")
    public String processForm(
            @Valid @ModelAttribute("emp") Employee emp,
            BindingResult br) {
                
        if (br.hasErrors()) {
            return "viewpage";
        }
        else {
            return "final";
        }
    }
}

4- إنشاء تعليق��ي

Password.java

package com.w3codebox.customvalidation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
@Constraint(validatedBy = PasswordConstraintValidator.class)
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Password {
    //رسالة خطأ
        public String message() default "must contain jtp";
    //يوضح مجموعة القيود   
        public Class<?>[] groups() default {};
    //يوضح معلومات إضافية حول التعليمة
        public Class<? extends Payload>[] payload() default {};
}

5、إنشاء كلاس��

PasswordConstraintValidator.java

package com.w3codebox.customvalidation;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class PasswordConstraintValidator implements ConstraintValidator<Password, String> {
    public boolean isValid(String s, ConstraintValidatorContext cvc) {
        
        boolean result = s.contains("jtp");
        return result;
    }
}

6、في ملف web.xml يقدم مدخل التحكم

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>

7-تعريف الباين في ملف xml

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">
    <!-- توفير الدعم للتصنيف المكونات -->
    <context:component-scan base-package="com.w3codebox" />
    <!-- توفير الدعم للتحويل، التنسيق والتحقق من الصحة -->
    <mvc:annotation-driven/>
    <!-- تعريف محلل العروض MVC -->
     <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>

8、إنشاء صفحة الطلب

index.jsp

<html>
<body>
<a href="hello">انقر هنا...</a>
</body>
</html>

9、إنشاء العناصر المرئية الأخرى

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="password" />
        <form:errors path="password" cssClass="error" />
        <br><br>
        
        العمر (*): <form:input path="age" />
        <form:errors path="age" cssClass="error" />
        <br><br>
        <input type="submit" value="Submit" />
    </form:form>
</body>
</html>

final.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<body>
اسم المستخدم: ${emp.name}<br><br>
كلمة المرور: ${emp.password}<br><br>
العمر: ${emp.age}
<br><br>
</body>
</html>

الإخراج:



في هذا المكان، لا نحتاج إلى إدخال سلسلة "jtp" عند إدخال كلمة المرور.



الآن، كلمة المرور التي نطرحها تحتوي على سلسلة "jtp".