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()) |