Просто... Мне нужно знать, выполняют ли эти атрибуты списка ту же работу или нет.
<s:select name="city" label="City" list="cities" listKey="id" listValue="name" />
а также
<s:select name="city" label="City" list="%{getCities()}" listKey="id" listValue="name" />
можем ли мы вызвать методы действий, подобные выше, если "да", что это правильный способ сделать это?
благодаря,
list="cities"
и list="%{getCities()}"
оба точно такие же. Оба вызова getter из List<City> cities
в классе действий для чтения значения из valuestack
.
Оба будут вызывать ошибку, если getter будет удален.
1. <s:select name="city" label="City" list="cities[0]" listKey="id" listValue="name" />
оценивается
a. <s:select name="city" label="City" list="%{cities[0]}" listKey="id" listValue="name" />
b. <s:select name="city" label="City" list="%{getCities().get(0)}" listKey="id" listValue="name" />
1, a & b одинаковы, потому что% заставляет оценивать OGNL
. который будет запрашивать стек для определенного свойства.
OGNL поддерживает коллекции, поэтому мы можем использовать эти три.
Мы называем действия, когда мы используем особую потребность.
Например
<s:url id="databaseList" action="fetch-citynames" />
<sd:autocompleter key="search"
href="%{databaseList}" name="searchText" />
Здесь fetch-citynames
возвращают список json
.
Также см. Эту ссылку
На самом деле я читаю отсюда
Основная причина заключается в том, что синтаксис %{}
используется для принудительной оценки OGNL, где Struts иначе обрабатывал бы значение как строковый литерал.
Например,
<s:property value="name" />
будет искать свойство имени в стеке значений, то есть значение, полученное вызовом getName().
Если вы хотите заставить его использовать буквенное значение "name", вам нужно будет использовать синтаксис %{}
-
<s:property value="%{'name'}" />
Но в случае <s:select list=""/>
используется OGNL Collection Construction
Вот как методы вызова OGNL
. См. Здесь