مكتبة للتحقق من صحة وتعيين معلمات الطلب لـ Scalatra.
ملاحظة: لم يعد يتم الحفاظ على هذا المشروع لأنه تم دمجه في Scalatra! راجع وثائق Scalatra لمعرفة التفاصيل.
في البداية، أضف التبعية التالية إلى build.sbt الخاص بك لاستخدام نماذج scalatra.
libraryDependencies += " io.github.gitbucket " %% " scalatra-forms " % " 1.1.0 " بعد ذلك، أضف ValidationJavaScriptProvider إلى Bootstrap لتطبيق Scalatra الخاص بك.
import io . github . gitbucket . scalatra . forms . _
class ScalatraBootstrap extends LifeCycle {
override def init ( context : ServletContext ) {
...
context.mount( new ValidationJavaScriptProvider , " /assets/js/* " )
...
}
}أشكال Scalatra جاهزة الآن.
تحديد تعيين النموذج. إنه مشابه لـ Play2، لكن أشكال Scalatra أكثر مرونة.
import io . github . gitbucket . scalatra . forms . _
case class RegisterForm ( name : String , description : String )
val form = mapping(
" name " -> text(required, maxlength( 40 )),
" description " -> text()
)( RegisterForm .apply) بعد ذلك، قم بإنشاء servlet (أو مرشح) الذي يمتد ScalatraServlet (أو ScalatraFilter). تم مزجه أيضًا في FormSupport أو ClientSideValidationFormSupport . يتم تمرير الكائن الذي تم تعيين معلمات الطلب إليه كوسيطة إجراء.
class RegisterServlet extends ScalatraServlet with ClientSideValidationFormSupport {
post( " /register " , form) { form : RegisterForm =>
...
}
}في HTML، عليك القيام بأمرين أدناه.
<script> لاستيراد jQuery المطلوب بواسطة validation.js<script> لاستيراد validation.js الذي يساعد في التحقق من جانب العميل الذي يوفره ValidationJavaScriptProvidervalidation="true" إلى <form> الخاص بك تقوم Scalatra-Forms بتسجيل مستمع حدث الإرسال للتحقق من صحة محتويات النموذج. يقوم هذا المستمع بنشر كافة محتويات النموذج إلى FORM_ACTION/validate . يتم تسجيل هذا الإجراء بواسطة scalatra-forms تلقائيًا للتحقق من صحة محتويات النموذج. تقوم بإرجاع نتائج التحقق من الصحة كـ JSON.
من جانب العميل، تضع نماذج Scalatra رسائل الخطأ في span#error-FIELD_NAME .
< script src = " http://code.jquery.com/jquery-2.0.3.min.js " ></ script >
< script src = " /assets/js/validation.js " ></ script >
...
< form method = " POST " action = " /register " validation = " true " >
Name : < input type = " name " type = " text " >
< span class = " error " id = " error-name " ></ span >
< br />
Description : < input type = " description " type = " text " >
< span class = " error " id = " error-description " ></ span >
< br />
< input type = " submit " value = " Register " />
</ form > يمكنك إنشاء Constraint مخصص.
def identifier : Constraint = new Constraint (){
override def validate ( name : String , value : String ) : Option [ String ] =
if ( ! value.matches( " ^[a-zA-Z0-9 \ -_]+$ " )){
Some ( s " ${name} contains invalid character. " )
} else {
None
}
}
val form = mapping(
" name " -> text(required, identifier),
" description " -> text()
)( RegisterForm .apply) يمكنك أيضًا إنشاء مدقق متعدد الحقول عن طريق تجاوز validate(String, String, Map[String, String]) . من الممكن البحث عن قيمة حقل أخرى عبر params .
هناك طريقة أخرى لإنشاء أداة التحقق من صحة الحقول المتعددة وهي استدعاء verifying من التعيين. يمكنك إعطاء الوظيفة للتحقق من صحة فئة الحالة المعينة. تأخذ هذه الوظيفة القيمة المعينة وترجع Seq[(String, String)] الذي يحتوي على أخطاء أو Nil .
val form = mapping(
" reason " -> number(required),
" description " -> optional(text)
)( ReasonForm .apply).verifying { value =>
if (value.reason == 4 && value.descripsion){
Seq ( " description " -> " If reason is 'Other' then description is required. " )
} else {
Nil
}
} بالنسبة إلى إجراء Ajax، استخدم ajaxGet أو ajaxPost بدلاً من get أو post . تؤدي الإجراءات التي تم تحديدها بواسطة ajaxGet أو ajaxPost إلى التحقق من صحة النتيجة كاستجابة JSON.
class RegisterServlet extends ScalatraServlet with ClientSideValidationFormSupport {
ajaxPost( " /register " , form) { form : RegisterForm =>
...
}
} في جانب العميل، يمكنك عرض رسائل الخطأ باستخدام displayErrors() .
$ ( '#register' ) . click ( function ( e ) {
$ . ajax ( $ ( this ) . attr ( 'action' ) , {
type : 'POST' ,
data : {
name : $ ( '#name' ) . val ( ) ,
description : $ ( '#description' ) . val ( )
}
} )
. done ( function ( data ) {
$ ( '#result' ) . text ( 'Registered!' ) ;
} )
. fail ( function ( data , status ) {
displayErrors ( $ . parseJSON ( data . responseText ) ) ;
} ) ;
} ) ; io.github.gitbucket .put() و delete() و ajaxPut() و ajaxDelete() إلى ClientSidevalidationFormSupport .long .%s ) في الرسائل المخصصة مثل الرسائل الافتراضية.dummy() .long .list للخصائص غير المتداخلة.dummy .verifying() لـ MappingValueType وإزالة MappingConstraint بدلاً منه.length .MappingConstraint للتحقق من صحة الكائن المحول بواسطة MappingValueType .list() لـ SingleValueType .ValidationJavaScriptProvider رأس نوع المحتوى لـ validation.js.oneOf() الذي يتحقق مما إذا كانت القيمة إحدى السلاسل المحددة.number() و double() من ResourceBundle.double() date() .ValidationJavaScriptProvoider .list() لخاصية القائمة.validate(String, String, Map[String, String]) إلى Constraint . يجعل من الممكن الوصول إلى معلمة أخرى في التحقق من صحة حقل واحد.verify() إلى MappingValueType الذي يتحقق من صحة المثيل المعين.