1) Я не знаю, почему вы думаете, что вызов свойства customerRelations
и затем использование customerRelations
в теге итератора вызовет getCustomerRelations()
только один раз; вы используете его дважды, поэтому, как минимум, он будет вызван дважды.
Если вы хотите сохранить ссылку на нее, используйте <s:set>
, чтобы создать новую ссылку на коллекцию. Однако я не вижу смысла в этом, если только ваш добытчик не занимает много времени.
Я не вижу того же поведения. Учитывая фрагмент <script>
вопроса, он рендерится таким образом (предполагая фиктивный трехэлементный список с образцами данных):
<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.
Скорее всего, я поверю в JSP / JS / и т. Д. на данный момент.
2) Тег итератора помещает каждый объект на вершину стека, как описано в документе тег . Вершина стека - это первый объект, который будет использоваться для получения значения relationId
. Если он не найден в верхней части стека, OGNL будет проходить по стеку значений, пока либо не будет найдено свойство, либо стека больше не будет.
3) См. Предыдущий ответ: как только вы вышли из итератора, в стеке больше нет отношения с клиентом, и вы вернулись к действию.