Can someone explain why this does not work ?
StringTemplate query = new StringTemplate(\"hello \" +
\"$if(param==\\\"val1\\\")$\" +
You can't compare strings inside stringtemplate, unfortunately, but you can send a result of such a comparison into template as a parameter:
StringTemplate query = new StringTemplate("hello " +
"$if(paramEquals)$" +
" it works! " +
"$endif$ " +
"world");
query.setAttribute("paramEquals", param.equals("val1"));
System.out.println("result: "+query.toString());
It might not be what you're looking for, since every time you need to add a comparison you have to pass an extra parameter, and for loops it's even worse. But this is one workaround that may work for simple cases.