final ThymeleafEvaluationContext evaluationContext =
new ThymeleafEvaluationContext(applicationContext, conversionService);
mergedModel.put(ThymeleafEvaluationContext.THYMELEAF_EVALUATION_CONTEXT_CONTEXT_VARIABLE_NAME, evaluationContext);
final SpringWebContext context =
new SpringWebContext(request, response, servletContext, getLocale(), mergedModel, getApplicationContext());
final String templateName;
final IFragmentSpec nameFragmentSpec;
if (!viewTemplateName.contains("::")) {
// No fragment specified at the template name
templateName = viewTemplateName;
nameFragmentSpec = null;
} else {
// Template name contains a fragment name, so we should parse it as such
final Configuration configuration = viewTemplateEngine.getConfiguration();
final ProcessingContext processingContext = new ProcessingContext(context);
final String dialectPrefix = getStandardDialectPrefix(configuration);
final StandardFragment fragment =
StandardFragmentProcessor.computeStandardFragmentSpec(
configuration, processingContext, viewTemplateName, dialectPrefix, StandardFragmentAttrProcessor.ATTR_NAME);
if (fragment == null) {
throw new IllegalArgumentException("Invalid template name specification: '" + viewTemplateName + "'");
}
templateName = fragment.getTemplateName();
nameFragmentSpec = fragment.getFragmentSpec();
final Map<String,Object> nameFragmentParameters = fragment.getParameters();
if (nameFragmentParameters != null) {
if (FragmentSelectionUtils.parameterNamesAreSynthetic(nameFragmentParameters.keySet())) {
// We cannot allow synthetic parameters because there is no way to specify them at the template
// engine execution!
throw new IllegalArgumentException(
"Parameters in a view specification must be named (non-synthetic): '" + viewTemplateName + "'");
}
context.setVariables(nameFragmentParameters);
}
}