我现在定义了一个指令,在指令内定义了一个变量product,我的本意这个变量的作用域就是在指令内有效,指令外应该访问不到才是。
public void exec(Env env, Scope scope, Writer writer) {
Object categoryId = idExpr.eval(scope);
List<Product> list = srv.getProductList(categoryId);
for(Product product : list) {
scope.setLocal("product", product);
stat.exec(env, scope, writer);
}
}但是我在当前Controller请求内也设置了一变量product,执行渲染结果是这个product的值变成上面那个指令变量product最后一个赋值了
public void index() {
Product product = srv.getProduct(get(0));
if(null == product) {
render("product.html");
return;
}
set("product", product);
Template template = srv.getTemplate(product.getTemplateId());
if(null == template) {
render("product.html");
} else {
render(template.getTemplateFilename());
}
}现在能做的只能是避免变量名重复,但是如果定义的指令很多的话,这样变量定义就是个头痛问题。
但是又想想,如果当前Controller请求内的变量进到指令的html代码里调用,这样也会出现不知道是哪个的问题,很矛盾啊。