Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Nov 16, 2017. It is now read-only.

A library to validate and map request parameters for Scalatra.

NotificationsYou must be signed in to change notification settings

gitbucket/scalatra-forms

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A library to validate and map request parameters for Scalatra.

Notice: This project is maintained no longer because it has been merged into Scalatra! Seethe Scalatra documentation to know details.

Getting Started

At first, add the following dependency into your build.sbt to use scalatra-forms.

libraryDependencies+="io.github.gitbucket"%%"scalatra-forms"%"1.1.0"

Next, addValidationJavaScriptProvider to Bootstrap of your Scalatra application.

importio.github.gitbucket.scalatra.forms._classScalatraBootstrapextendsLifeCycle {overridedefinit(context:ServletContext) {    ...    context.mount(newValidationJavaScriptProvider,"/assets/js/*")    ...  }}

scalatra-forms is now ready.

Define a form mapping. It's a similar to Play2, but scalatra-forms is more flexible.

importio.github.gitbucket.scalatra.forms._caseclassRegisterForm(name:String,description:String)valform= mapping("name"-> text(required, maxlength(40)),"description"-> text())(RegisterForm.apply)

Next, create a servlet (or filter) which extends ScalatraServlet (or ScalatraFilter).It also mixed inFormSupport orClientSideValidationFormSupport.The object which is mapped request parameters is passed as an argument of action.

classRegisterServletextendsScalatraServletwithClientSideValidationFormSupport {  post("/register", form) {form:RegisterForm=>    ...  }}

In the HTML, you have to do two things below.

  • Add<script> to import jQuery which is required by validation.js
  • Add<script> to import validation.js which helps client side validation provided byValidationJavaScriptProvider
  • Addvalidation="true" to your<form>

scalatra-forms registers a submit event listener to validate form contents.This listener posts all the form contents toFORM_ACTION/validate.This action is registered by scalatra-forms automatically to validate form contents.It returns validation results as JSON.

In the client side, scalatra-forms puts error messages intospan#error-FIELD_NAME.

<scriptsrc="http://code.jquery.com/jquery-2.0.3.min.js"></script><scriptsrc="/assets/js/validation.js"></script>...<formmethod="POST"action="/register"validation="true">Name: <inputtype="name"type="text">  <spanclass="error"id="error-name"></span>  <br/>Description: <inputtype="description"type="text">  <spanclass="error"id="error-description"></span>  <br/>  <inputtype="submit"value="Register"/></form>

Custom Validation

You can create customConstraint.

defidentifier:Constraint=newConstraint(){overridedefvalidate(name:String,value:String):Option[String]=if(!value.matches("^[a-zA-Z0-9\\-_]+$")){Some(s"${name} contains invalid character.")    }else {None    }}valform= mapping("name"-> text(required, identifier),"description"-> text())(RegisterForm.apply)

You can also create multi field validator by overridingvalidate(String, String, Map[String, String]).It's possible to look up other field value viaparams.

Other way to create multi field validator is callingverifying for mapping.You can give the function yo validate the mapped case class. This function takes the mapped value and returnsSeq[(String, String)] which contains errors orNil.

valform= 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

For the Ajax action, useajaxGet orajaxPost instead ofget orpost.Actions which defined byajaxGet orajaxPost return validation result as JSON response.

classRegisterServletextendsScalatraServletwithClientSideValidationFormSupport {  ajaxPost("/register", form) {form:RegisterForm=>    ...  }}

In the client side, you can render error messages usingdisplayErrors().

$('#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));});});

Release Notes

1.1.0 - 25 Nov 2016

  • Scalatra 2.5.0 and Scala 2.12 support

1.0.0 - 31 Dec 2015

  • Move to GitBucket organization.
  • Change group id and package name toio.github.gitbucket.
  • Addput(),delete(),ajaxPut() andajaxDelete() toClientSidevalidationFormSupport.

0.2.0 - 18 Nov 2015

  • Fix performance issue

0.1.0 - 9 Jul 2014

  • Support Scala 2.11 and Scalatra 2.3

0.0.14 - 19 Feb 2014

  • Bug fix about form state after after validation succeeded.

0.0.13 - 2 Feb 2014

  • Bug fix forlong value type.

0.0.12 - 29 Dec 2013

  • Formatting (such as%s) is available in custom messages as same as default messages.

0.0.11 - 12 Dec 2013

  • Fixdummy() bug.

0.0.10 - 10 Dec 2013

  • Addlong value type.
  • Fixlist bug for un-nested properties.

0.0.9 - 6 Dec 2013

  • Adddummy value type.

0.0.8 - 14 Nov 2013

  • Fix nested property handling problem.
  • Fixverifying() forMappingValueType and removeMappingConstraint instead of it.
  • Addlength constraint.

0.0.7 - 12 Nov 2013

  • AddMappingConstraint to validate converted object byMappingValueType.

0.0.6 - 8 Nov 2013

  • Addlist() mapping forSingleValueType.
  • ValidationJavaScriptProvider adds Content-Type header for validation.js.
  • Fix to run parent validations before number checking.

0.0.5 - 3 Nov 2013

  • AddoneOf() constraint which checks whether the value is one of specified strings.
  • Fix to retrieve error message fornumber() anddouble() from ResourceBundle.

0.0.4 - 2 Nov 2013

  • Adddouble() anddate() mapping.
  • Add I18N support for error messages.

0.0.3 - 18 Oct 2013

  • AddValidationJavaScriptProvoider.
  • Addlist() mapping for List property.

0.0.2 - 10 Aug 2013

  • Improved nested property support.
  • Addvalidate(String, String, Map[String, String]) toConstraint.It makes possible to access other parameter in single field validation.
  • Addverify() toMappingValueType which validates the mapped instance.

0.0.1 - 04 Aug 2013

  • This is the first public release.

About

A library to validate and map request parameters for Scalatra.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors3

  •  
  •  
  •  

[8]ページ先頭

©2009-2025 Movatter.jp