Stringtemplate比较字符串不起作用

Ale*_*xey 5 java stringtemplate

有人可以解释为什么这不起作用?

StringTemplate query = new StringTemplate("hello " +  
                "$if(param==\"val1\")$" +  
                " it works! " +  
                "$endif$ " +  
                "world");  
        query.setAttribute("param", "val1");  
        System.out.println("result: "+query.toString());  
Run Code Online (Sandbox Code Playgroud)

它抛出

eval树解析错误:0:0:org.antlr.stringtemplate.language.ActionEvaluator.ifCondition(ActionEvaluator.java:815)org.antlr.stringtemplate.language.ConditionalExpr.write(ConditionalExpr.java:99)中子树的意外结束)

Ter*_*arr 12

ST不允许在模板中进行计算.这将使其成为模型的一部分.

  • 很难说它是真正的优势还是弱点.很容易理解为什么这不是那么明显:其他模板引擎都有它.检查相等性并不是一个"计算",另外还有字符串模板中的条件. (5认同)
  • 它让我很难以理解人们如何找到StringTemplate,阅读足够的内容来创建一个示例,但却没有掌握其最重要的优势. (2认同)

mvm*_*vmn 5

不幸的是,您无法在 stringtemplate 中比较字符串,但您可以将此类比较的结果作为参数发送到模板中:

StringTemplate query = new StringTemplate("hello " +  
                "$if(paramEquals)$" +  
                " it works! " +  
                "$endif$ " +  
                "world");  
        query.setAttribute("paramEquals", param.equals("val1"));  
        System.out.println("result: "+query.toString());
Run Code Online (Sandbox Code Playgroud)

它可能不是您想要的,因为每次需要添加比较时,您都必须传递一个额外的参数,而 for 循环则更糟。但这是一种适用于简单情况的解决方法。