Stringtemplate比较字符串不起作用

时间:2010-11-16 15:34:06

标签: java stringtemplate

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

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

它抛出

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

2 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:4)

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

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

它可能不是你想要的,因为每次你需要添加一个比较你必须传递一个额外的参数,而对于循环它甚至更糟。但这是一个可能适用于简单案例的解决方法。