Struts2 关于struts 2中的值堆栈的一些基本查询?
虽然我在struts 1.2上工作过,但我对struts 2还是新手。在一个现有的项目jsp文件中,我有以下代码:Struts2 关于struts 2中的值堆栈的一些基本查询?,struts2,struts,valuestack,Struts2,Struts,Valuestack,虽然我在struts 1.2上工作过,但我对struts 2还是新手。在一个现有的项目jsp文件中,我有以下代码: <script type="text/javascript"> var relationshipData = { // line1 page : '<s:property value="displayPage" />', // line2 records : '<s:property value="customerRelations
<script type="text/javascript">
var relationshipData = { // line1
page : '<s:property value="displayPage" />', // line2
records : '<s:property value="customerRelations.size" />', // line3
rows : [ <s:iterator value="customerRelations" status="iterStatus"> // line4
{ id : '<s:property value="relationId" />',
cell : [ '<s:property value="relationDesc" escapeJavaScript="true" />' ] } <s:if test="!#iterStatus.last">,</s:if> //line5
</s:iterator>] // line6
};
</script>
var relationshipData={//line1
页面:“”,//第2行
记录:“”,//第3行
行:[//第4行
{id:'',
单元格:[''']},//第5行
]//第6行
};
请求来自CustomerRelationAction.java
,它有方法getCustomerRelations()
和getRelationId()
问题如下:
getCustomerRelations()
中。我看到流在这个方法中出现了四次。三号线两次,四号线两次。
根据我的理解,流量应该只出现1次,即在第3行。在第3行完成getCustomerRelations后,不应将其值放入值堆栈中,以便
它下次被引用时可以引用它(就像它在第14行再次被引用一样)getCustomerRelations()
方法返回CustomerRelationData
对象的列表,其中CustomerRelationData
类还包含getRelationId()
方法。现在在第行
5我们在第5行引用value=“relationId”。在哪个对象(CustomerRelationAction.java或CustomerRelationData)上调用getRelationId()方法?
甚至我也不确定列表对象CustomerRelationData是否会出现在值堆栈上?如果是,它将放在值堆栈的哪一行
,在哪个对象上(CustomerRelationAction.java或CustomerRelationData),
是否将调用getRelationId()方法customerRelations
的属性,然后在迭代器标记中使用customerRelations
只能调用getCustomerRelations()
一次;您使用它两次,所以至少会调用两次
如果您想保留对它的引用,请使用
创建对集合的新引用。但是,我认为这样做没有意义,除非您的getter正在做一些耗时的事情
我看不到相同的行为。给定问题的
片段,它呈现为(假设一个包含示例数据的虚拟三元素列表):
在这一点上,我更可能相信JSP/JS/etc
2)迭代器标记将每个对象放在堆栈顶部,如中所述。堆栈顶部是用于获取relationId
值的第一个对象。如果在堆栈顶部找不到它,OGNL将遍历值堆栈,直到找到属性或不再有堆栈为止
3)查看前面的答案:一旦退出迭代器,堆栈上就不再有客户关系,您又回到了操作中。感谢Dave的回答和耐心。正如您所说,迭代器标记将每个对象放在堆栈顶部。s:property标记是否也将检索到的对象放在值堆栈中(类似于“”标记是否将displayPage的值放入值堆栈)?根据我在调试器模式下的观察,它没有。@MSach:property标记将从valuestack获取值。如果是迭代器,它将把对象推到值堆栈的顶部,以便在页面中检索相同的值
<script type="text/javascript">
var relationshipData = { // line1
records : '3', // line3
rows : [ // line4
{ id : '1',
cell : [ 'desc 1' ] } , //line5
// line4
{ id : '2',
cell : [ 'desc 2' ] } , //line5
// line4
{ id : '3',
cell : [ 'desc 3' ] } //line5
] // line6
};
</script>
2012-01-19 13:58:10,552 DEBUG [TextExampleAction.java:18] : Enter.
2012-01-19 13:58:10,571 DEBUG [TextExampleAction.java:18] : Enter.