Last active
September 12, 2018 02:02
-
-
Save joyheron/8a60e27b97626774a21009a159f4791e to your computer and use it in GitHub Desktop.
Complate String Render in Spring Boot
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class StringRenderer { | |
private static final String RENDER_FUNCTION_NAME = "render"; | |
private final Resource resourceBundle; | |
private final ScriptingEngine engine; | |
public StringRenderer(Resource resourceBundle, ScriptingEngine engine) { | |
this.resourceBundle = resourceBundle; | |
this.engine = engine; | |
} | |
public String renderView(String viewName, Map<String, Object> model) { | |
StringWriter writer = new StringWriter(); | |
this.engine.invoke( | |
this.resourceBundle, | |
RENDER_FUNCTION_NAME, | |
new WriterStream(writer), | |
viewName, | |
model); | |
return writer.toString(); | |
} | |
public String renderView(ModelAndView modelAndView) { | |
return renderView(modelAndView.getViewName(), modelAndView.getModel()); | |
} | |
static class WriterStream implements ComplateStream { | |
private final BufferedWriter writer; | |
WriterStream(Writer writer) { | |
this.writer = new BufferedWriter(writer); | |
} | |
@Override | |
public void write(String s) { | |
writer.write(s); | |
} | |
@Override | |
public void writeln(String line) { | |
writer.write(line); | |
writer.newLine(); | |
} | |
@Override | |
public void flush() throws IOException { | |
writer.flush(); | |
} | |
} | |
} | |
@Configuration | |
@EnableScheduling | |
class WebConfig implements WebMvcConfigurer { | |
@Bean | |
public ViewResolver complateViewResolver(@Value("${complate.bundle.path}") Resource complateBundle) { | |
return new ComplateViewResolver(scriptingEngine(), complateBundle); | |
} | |
@Bean | |
public StringRenderer stringRenderer(@Value("${complate.bundle.path}") Resource complateBundle) { | |
return new StringRenderer(complateBundle, scriptingEngine()); | |
} | |
@Bean | |
public ScriptingEngine scriptingEngine() { | |
// This showcases how java classes can also be used from complate views | |
// via Nashorn bindings. In this case "logger" will be available in our views | |
final Map<String, Object> bindings = singletonMap("logger", LoggerFactory.getLogger(ComplateView.class)); | |
return new NashornScriptingBridge(bindings); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment