You can create a class that implements NodeValueRenderer
if you want to customize the elements of a NodeValueTemplate
based on node data. When you declare the getValue()
method, you can use NodeTemplateContext
to retrieve current node data. See the following example implementation:
class SourcePictureRenderer implements NodeValueRenderer { @Override public String getValue(NodeTemplateContext context) { String countryCode = (String) context.getNodeContext() .getNode() .getRecord() .get(Path.parse("/country_code")); if(StringUtils.isEmpty(countryCode)) { return ""; } switch (countryCode) { case "fr": return "/common/icons/french_flag.png" case "vn": return "/common/icons/vietnam_flag.png" case "us" return "/common/icons/usa_flag.png" default: return ""; } } }
Once created, you can pass the class to certain template element methods:
NodeImage.setBindingSource(nodeValueRendererInstance)
NodeTextBlock.setBindingText(nodeValueRendererInstance)
The following shows how the example NodeValueRenderer
above can be passed to a setBindingSource()
method to retrieve an image:
NodeImage avatar = new NodeImage(); avatar.setBindingSource(new SourcePictureRenderer())