`stopwatch on

## Some Samples that demonstrate Japid features.

Please follow the controller actions and render paths for the source code.

- Hello Japid, using an overridden version of renderText()
- using tags in a template
- def tag: define a method that return a string that can be invoked from super template. Compare this to the set tag
*{ this is a little too complicated
- demo how to composite a page with independent segments with the invoke tag
}*
- demo how to composite a page with independent segments with the invoke tag
- implicit template binding with JapidController.renderJapid()
- a template with template and tags etc...
- use the log macro in a template. watch the output in the console
- i18n, use predefined messages
- looping and tag calling
- the "open for" loop and the now deprecated "*Each* tag
- open if statement: minimalistic if-else statement can can take any expression rather than boolean values as the condition.

  example:

      		    ``if expr
      		        xxx
      		    ``else if expr
      		        yyy
      		    ``else
      		        zzz
      		    ``

- using invoke tag with local variables requires final attribute
- suppressNull, a directive to allow safe navigation in expression, default off
- show how to dump a post detail with japid.dump.request spec in the application.conf. see console for output.
- cache with renderJapid
- using the CacheFor annotation
- action forwarding with dontRedirect() from JapidController
- use ``{ in if and while
- `verbatim raw expression with ${} and html-safe expression with ~{} `
- content negotiation. Use tools like CURL to test it:

      curl -i -H "Accept: application/json" http://127.0.0.1:9000/more.ContentNegotiation/index

  Content negotiation works with renderJapid(), which does implicit parameter binding and template picking.

  For more doc: see Play Content Negotiation

- Use relative path in layout spec and tags: prefix the layout name or the tag name with a dot "." to let the compiler prefix the path with the current package. This saves using the full and long class qualifications.
`String na = "bran"; `int ag = 123;
- validation and errors
- using the flash object
  - flash with success
  - flash with errors
  - flash with a message
  - flash with a message
- ` SearchParams sp = new SearchParams("key1, key2", "AND"); reverse URL lookup with complex object
*{ }*