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);
}
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);
}
}
Aggregations