GWT JSR 303 التحقق من صحة العميل
-
27-09-2019 - |
سؤال
أقوم بتطوير تطبيق GWT مع الواجهة الخلفية الربيعية التي تستخدم التحقق من صحة JSR 303. يمكن للتطبيق أن يتصل بدون اتصال واستخدام قاعدة بيانات Browser HTML5/Gears بدلاً من ذلك.
ما هي أفضل طريقة لتنفيذ التحقق من صحة العميل؟ لقد وجدت حتى الآن إطار التحقق من صحة GWT (http://code.google.com/p/gwt-velidation/) ولكن يبدو أنها لم تعد نشطة.
شكرًا!
تحديث:
يوجد مشروع رسمي جديد لـ GWT لدعم التحقق من صحة Bean JSR 303 (رابط هنا). IMO هذه هي السبيل للذهاب بمجرد نضج المشروع بما فيه الكفاية.
المحلول
إطار التحقق من الصحة هو إطار التحقق من صحة البيانات من جانب العميل والخادم. تتمثل أدوارها في ضمان امتثال قواعد العمل للبيانات التي تم تمريرها من العملاء إلى الخادم.
يستخدم إطار التحقق من الصحة مشروع التحقق من صحة GWT الذي ينفذ مواصفات "JSR 303: Bean Validation".
تتمثل الفكرة في تزيين فئات كائنات نقل البيانات (DTO) والحقول التي تحتوي على تعليقات توضيحية JSR303 لوصف قواعد صلاحيتها.
- يجب تزيين كل كائنات نقل البيانات بشروحات التحقق من الصحة الخاصة بها.
- يجب على كل تطبيق خدمة من جانب الخادم التحقق من صحة كائنات نقل البيانات التي يتلقاها من العميل.
على جانب العميل ، لاستخدام التحقق من صحة GWT في مشروعك ، ستحتاج إلى إضافته (إلى جانب الجرة على ClassPath) إلى ملف GWT الخاص بك XML
<inherits name="com.google.gwt.validation.Validation" />
تأكد من تنفيذ DTOs com.google.gwt.validation.client.Interfaces.ivalidatable
للتحقق من الاستخدام من جانب العميل
com.google.gwt.validation.client.interfaces.IValidator.validateProperty((T) model, propertyName);
في استخدام جانب الخادم
com.google.gwt.validation.server.ServerValidator
إنه عمل قليلاً لإعداد هذا بشكل صحيح ولكنه يعمل بشكل مثالي.
نصائح أخرى
GWT 2.5 لديه ميزة جديدة فقط لهذا:https://developers.google.com/web-toolkit/doc/latest/devguidevalidation
ويستخدم مصادقة السبات.
1) ستحتاج إلى توسيع نطاق الملخصة gtvalidatorfactory وتطبيق الفاصوليا على سبيل المثال:
public final class SampleValidatorFactory extends AbstractGwtValidatorFactory {
/**
* Validator marker for the Validation Sample project. Only the classes and groups listed
* in the {@link GwtValidation} annotation can be validated.
*/
@GwtValidation(Person.class)
public interface GwtValidator extends Validator {
}
@Override
public AbstractGwtValidator createValidator() {
return GWT.create(GwtValidator.class);
}
}
2) ثم أضف هذا إلى gwt.xml الخاص بك:
<inherits name="org.hibernate.validator.HibernateValidator" />
<replace-with
class="yourpackage.SampleValidatorFactory">
<when-type-is class="javax.validation.ValidatorFactory" />
</replace-with>
3) التحقق من صحة الفول
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<Person>> violations = validator.validate(person);
لم أستخدمها بعد ، لكن GWT 2.1 يتضمن بعض دعم التحقق من الصحة.
تحقق من العرض مثال.