6

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

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

它抛出

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

4

2 回答 2

12

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

于 2010-11-16T16:05:56.613 回答
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());

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

于 2012-07-04T11:40:58.263 回答