我有3个模板 main.vm , sub1.vm ,sub2.vm
其中main.vm中嵌套了sub1.vm和sub2.vm。当前我有一个需求,这三个模板都需要用到参数id,id的具体值根据模板名称获取。
这样我就需要在解析到#parse("sub1.vm") 和#parse("sub2.vm") 时分别赋值。但我现在碰到一个问题,如果sub1.vm中又存在一个嵌套,我就无法处理了,请高手帮我解决一下。
BufferedReader bf = new BufferedReader(new InputStreamReader(
new FileInputStream("./src/example.vm"), "UTF-8"));
String aline = bf.readLine();
while (aline != null) {
...//其他逻辑处理
content += aline;
aline = bf.readLine();
}
evaluate(context, writer, "", new StringReader(content));
public static boolean evaluate(org.apache.velocity.context.Context context, Writer writer, String logTag, Reader reader) throws ParseErrorException, MethodInvocationException, ResourceNotFoundException, IOException {
SimpleNode nodeTree = null;
try {
nodeTree = RuntimeSingleton.parse(reader, logTag, false);
} catch (ParseException pex) {
throw new ParseErrorException(pex.getMessage());
}
if (nodeTree != null) {
InternalContextAdapterImpl ica = new InternalContextAdapterImpl(context);
ica.pushCurrentTemplateName(logTag);
nodeTree.init(ica, RuntimeSingleton.getRuntimeServices());
//输出
int i, k = nodeTree.jjtGetNumChildren();
for (i = 0; i < k; i++){
SimpleNode node =(SimpleNode)nodeTree.jjtGetChild(i);
Token t = node.getFirstToken();
if(t.image.indexOf("#parse")>=0){
// 为id赋值
ica.put("this", i);
}
nodeTree.jjtGetChild(i).render(ica, writer);
}
return true;
}
return false;
}