首页 > 代码库 > OGNL与ValueStack(VS)-N语法top语法(转)

OGNL与ValueStack(VS)-N语法top语法(转)

N语法[0]:<s:property value="http://www.mamicode.com/[0]"/><br>

N语法[1]:<s:property value="http://www.mamicode.com/[1]"/><br>
N语法[0].top:<s:property value="http://www.mamicode.com/[0].top"/><br>

N语法[1].top:<s:property value="http://www.mamicode.com/[1].top"/><br>
N语法top:<s:property value="http://www.mamicode.com/top"/><br>

N语法取值:<s:property value="http://www.mamicode.com/[0].user.username"/><br>

N语法取值:<s:property value="http://www.mamicode.com/top.user.username"/><br>
说明:规定栈顶的对象为[0],而我们只使用[0]的意思是从值栈中第一个对象取,一直取至栈底。N的意思是从值栈中的第N个对象开始,取到栈底为止。如果要想访问某个对象,需要使用[N].top,它的意思是取出符合N语法的栈顶对象,比如在这里,[0]会取出两个对象,而[0].top是取出这两个对象的栈顶对象。纯top可以简洁地取出值栈中的栈顶对象。
为什么要提出N语法,当我们通过chain链访问时,值栈中可能有两个以上的Action对象,如果这些对象中存在相同的属性,N便能正确区分他们。通常,这些Action对象的入栈顺序是:先访问先入栈。

从上面的N语法取值实例中,我们知道[N]top语法的一个重要作用就是能通过它们引用值栈对象中的属性。结合前面的五种[N]top语法实例,不难理解这里的取值实例。
补充:在此实例中,我们用<s:debug>调试会发现,值栈中还有一个DefaultTextProvider对象(因为此Action继承自ActionSupport),它的作用是获取资源文件中的内容(其实本质是ActionSupport重写了getText()方法),这也就是在国际化问题中我们能直接调用它的getText()方法的原因。

OGNL与ValueStack(VS)-N语法top语法(转)