Pebble 标签多个属性

Pebbel是java 模板引擎,给我的感觉就是简单,强大,模板也很简洁,还有相当强大的继承功能

pebble的标签和html的标签不一样,pebble的标签以 {% 开头,以 %}结束,具体请见 https://pebbletemplates.io/wiki/ ,要想实现一个标签很简单,只需要实现 TokenParser接口,TokenParser负责解析,返回一个RenderableNode负责渲染,RenderableNode默认会被缓存,请务必保证线程安全

TokenParser的解析有点奇怪,例如 {% if expression%} 那么这里的expression就不是一个属性,而是一个表达式,{% set header="I'm header"%} 这里就有一个header的属性,如果希望支持多个属性,可以参考SetTokenParser依葫芦画瓢这样做:

abstract class MultiAttributesTag implements TokenParser {

    @Override
    public RenderableNode parse(Token token, Parser parser) {
        TokenStream stream = parser.getStream();
        int lineNumber = token.getLineNumber();
        // skip the tag name token
        stream.next();
        Map<String, Expression<?>> attributes = new HashMap<>();
        while (!stream.current().test(Token.Type.EXECUTE_END)) {
            String name = parser.getExpressionParser().parseNewVariableName();
            stream.expect(Token.Type.PUNCTUATION, "=");
            Expression<?> value = parser.getExpressionParser().parseExpression();
            attributes.put(name, value);
        }
        stream.expect(Token.Type.EXECUTE_END);
        return getRenderableNode(lineNumber,attributes,token,parser);
    }

    protected abstract RenderableNode getRenderableNode(int lineNumber,Map<String,Expression<?>> attributes,Token token,Parser parser);

}
把你的项目发布到maven中央仓库(OSSRH)
element-ui 粘贴上传图片