Action definitions for this controller.
Angular application's server side API support.
Server side implementation for Angular apps.
Angular.js Cross Site Request Forgery (XSRF) Protection support.
Angular.js Cross Site Request Forgery (XSRF) Protection support.
https://docs.angularjs.org/api/ng/service/$http#cross-site-request-forgery-xsrf-protection
Angular.js Cross Site Request Forgery (XSRF) Protection support.
Angular.js Cross Site Request Forgery (XSRF) Protection support.
https://docs.angularjs.org/api/ng/service/$http#cross-site-request-forgery-xsrf-protection
beforeAction/afterAction support.
beforeAction/afterAction support.
http://guides.rubyonrails.org/action_controller_overview.html
Provides Cross-Site Request Forgery (CSRF) protection.
SkinnyEnv support.
Explicit redirect method support.
File upload feature.
File upload feature.
When using file upload feature, we cannot use SkinnyController(= serlvet Filter) due to Servlet restriction.
// src/main/scala/controller/FileUploadController.scala class FileUploadController extends SkinnyServlet with FileUploadFeature { def form = render("/fileUpload/form") def submit = { fileParams.get("file") match { case Some(file) => println(new String(file.get())) case None => println("file not found") } redirect(url(Controllers.fileUpload.formUrl)) } // src/main/scala/controller/Controllers.scala object fileUpload extends FileUploadController with Routes { val formUrl = get("/fileupload")(form).as('form) val submitUrl = post("/fileupload/submit")(submit).as('submit) } fileUpload.mount(ctx)
Easy-to-use Flash support.
Provides seamless Future operations within SkinnyController.
Provides seamless Future operations within SkinnyController. This trait enables accessing request, session and RequestScope from Future operations safely.
import scala.concurrent._ import scala.concurrent.duration._ import scala.concurrent.ExecutionContext.Implicits.global class SomeControllerOps(controller: SomeController) { def setOther(implicit req: HttpServletRequest) = { controller.set("bar", Seq(1,2,3)) // implicit request is not ambiguous here } } class SomeController extends ApplicationController { def index = { val ops = new SomeControllerOps(this) awaitFutures(5.seconds)( futureWithRequest { implicit req => // Explicitly specify HttpServletRequest here set("foo" -> FooService.getSomething()))(req) }, futureWithRequest(req => ops.setOther(req)) ) render("/some/index") } }
JSON response support.
Merging JSON request body into Scalatra params.
Merging JSON request body into Scalatra params.
When you'd like to avoid merging JSON request body into params in some actions, please separate controllers.
Easy-to-use default/session-based Locale configuration.
Request scope support.
RichRoute support.
Scalate implementation of TemplateEngineSupport.
Scalate implementation of TemplateEngineSupport.
This is basically same as Scalatra's Scalate support, but the convention of template file path is inspired by Ruby on Rails.
render("/members/index")
The above code expects "src/main/webapp/WEB-INF/views/members/index.html.ssp" by default.
If you need to use scaml instead,
override lazy val scalateExtension: String = "scaml"
And then, Skinny expects "src/main/webapp/WEB-INF/views/members/index.html.scaml"
Filtering sensitive parameters.
Filtering sensitive parameters.
config.filter_parameters in Rails.
Supports snake_case'd keys for parameter names.
TemplateEngine support for Skinny app.
Enables time logging.
Validation support for Skinny app.
Action definitions for this controller. These definitions will be used for beforeAction/afterAction's only/except.