Search in sources :

Example 1 with TemplateEngineFreemarkerAuthenticityFormDirective

use of ninja.template.directives.TemplateEngineFreemarkerAuthenticityFormDirective in project ninja by ninjaframework.

the class TemplateEngineFreemarkerAuthenticityFormDirectiveTest method before.

@Before
public void before() {
    when(context.getSession()).thenReturn(session);
    when(session.getAuthenticityToken()).thenReturn("12345");
    templateEngineFreemarkerAuthenticityFormDirective = new TemplateEngineFreemarkerAuthenticityFormDirective(context);
}
Also used : TemplateEngineFreemarkerAuthenticityFormDirective(ninja.template.directives.TemplateEngineFreemarkerAuthenticityFormDirective) Before(org.junit.Before)

Example 2 with TemplateEngineFreemarkerAuthenticityFormDirective

use of ninja.template.directives.TemplateEngineFreemarkerAuthenticityFormDirective in project ninja by ninjaframework.

the class TemplateEngineFreemarker method invoke.

@Override
public void invoke(Context context, Result result) {
    Object object = result.getRenderable();
    Map map;
    // if the object is null we simply render an empty map...
    if (object == null) {
        map = Maps.newHashMap();
    } else if (object instanceof Map) {
        map = (Map) object;
    } else {
        // We are getting an arbitrary Object and put that into
        // the root of freemarker
        // If you are rendering something like Results.ok().render(new MyObject())
        // Assume MyObject has a public String name field.            
        // You can then access the fields in the template like that:
        // ${myObject.publicField}            
        String realClassNameLowerCamelCase = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, object.getClass().getSimpleName());
        map = Maps.newHashMap();
        map.put(realClassNameLowerCamelCase, object);
    }
    // set language from framework. You can access
    // it in the templates as ${lang}
    Optional<String> language = lang.getLanguage(context, Optional.of(result));
    if (language.isPresent()) {
        map.put("lang", language.get());
    }
    // You can access the values by their key in the cookie
    if (!context.getSession().isEmpty()) {
        map.put("session", context.getSession().getData());
    }
    map.put("contextPath", context.getContextPath());
    map.put("validation", context.getValidation());
    //////////////////////////////////////////////////////////////////////
    // A method that renders i18n messages and can also render messages with 
    // placeholders directly in your template:
    // E.g.: ${i18n("mykey", myPlaceholderVariable)}
    //////////////////////////////////////////////////////////////////////
    map.put("i18n", new TemplateEngineFreemarkerI18nMethod(messages, context, result));
    Optional<String> requestLang = lang.getLanguage(context, Optional.of(result));
    Locale locale = lang.getLocaleFromStringOrDefault(requestLang);
    map.put("prettyTime", new TemplateEngineFreemarkerPrettyTimeMethod(locale));
    map.put("reverseRoute", templateEngineFreemarkerReverseRouteMethod);
    map.put("assetsAt", templateEngineFreemarkerAssetsAtMethod);
    map.put("webJarsAt", templateEngineFreemarkerWebJarsAtMethod);
    map.put("authenticityToken", new TemplateEngineFreemarkerAuthenticityTokenDirective(context));
    map.put("authenticityForm", new TemplateEngineFreemarkerAuthenticityFormDirective(context));
    ///////////////////////////////////////////////////////////////////////
    // Convenience method to translate possible flash scope keys.
    // !!! If you want to set messages with placeholders please do that
    // !!! in your controller. We only can set simple messages.
    // Eg. A message like "errorMessage=my name is: {0}" => translate in controller and pass directly.
    //     A message like " errorMessage=An error occurred" => use that as errorMessage.  
    //
    // get keys via ${flash.KEYNAME}
    //////////////////////////////////////////////////////////////////////
    Map<String, String> translatedFlashCookieMap = Maps.newHashMap();
    for (Entry<String, String> entry : context.getFlashScope().getCurrentFlashCookieData().entrySet()) {
        String messageValue = null;
        Optional<String> messageValueOptional = messages.get(entry.getValue(), context, Optional.of(result));
        if (!messageValueOptional.isPresent()) {
            messageValue = entry.getValue();
        } else {
            messageValue = messageValueOptional.get();
        }
        // new way
        translatedFlashCookieMap.put(entry.getKey(), messageValue);
    }
    // now we can retrieve flash cookie messages via ${flash.MESSAGE_KEY}
    map.put("flash", translatedFlashCookieMap);
    // Specify the data source where the template files come from.
    // Here I set a file directory for it:
    String templateName = templateEngineHelper.getTemplateForResult(context.getRoute(), result, this.fileSuffix);
    Template freemarkerTemplate = null;
    try {
        freemarkerTemplate = cfg.getTemplate(templateName);
        // Fully buffer the response so in the case of a template error we can 
        // return the applications 500 error message. Without fully buffering 
        // we can't guarantee we haven't flushed part of the response to the
        // client.
        StringWriter buffer = new StringWriter(64 * 1024);
        freemarkerTemplate.process(map, buffer);
        ResponseStreams responseStreams = context.finalizeHeaders(result);
        try (Writer writer = responseStreams.getWriter()) {
            writer.write(buffer.toString());
        }
    } catch (Exception cause) {
        // delegate rendering exception handling back to Ninja
        throwRenderingException(context, result, cause, templateName);
    }
}
Also used : Locale(java.util.Locale) TemplateEngineFreemarkerAuthenticityTokenDirective(ninja.template.directives.TemplateEngineFreemarkerAuthenticityTokenDirective) ResponseStreams(ninja.utils.ResponseStreams) TemplateEngineFreemarkerAuthenticityFormDirective(ninja.template.directives.TemplateEngineFreemarkerAuthenticityFormDirective) RenderingException(ninja.exceptions.RenderingException) TemplateException(freemarker.template.TemplateException) TemplateNotFoundException(freemarker.template.TemplateNotFoundException) IOException(java.io.IOException) ParseException(freemarker.core.ParseException) Template(freemarker.template.Template) StringWriter(java.io.StringWriter) Map(java.util.Map) StringWriter(java.io.StringWriter) Writer(java.io.Writer)

Aggregations

TemplateEngineFreemarkerAuthenticityFormDirective (ninja.template.directives.TemplateEngineFreemarkerAuthenticityFormDirective)2 ParseException (freemarker.core.ParseException)1 Template (freemarker.template.Template)1 TemplateException (freemarker.template.TemplateException)1 TemplateNotFoundException (freemarker.template.TemplateNotFoundException)1 IOException (java.io.IOException)1 StringWriter (java.io.StringWriter)1 Writer (java.io.Writer)1 Locale (java.util.Locale)1 Map (java.util.Map)1 RenderingException (ninja.exceptions.RenderingException)1 TemplateEngineFreemarkerAuthenticityTokenDirective (ninja.template.directives.TemplateEngineFreemarkerAuthenticityTokenDirective)1 ResponseStreams (ninja.utils.ResponseStreams)1 Before (org.junit.Before)1