我现在定义了一个指令,在指令内定义了一个变量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代码里调用,这样也会出现不知道是哪个的问题,很矛盾啊。