简单地说..我需要知道这些列表属性是否在做同样的工作。
<s:select name="city" label="City" list="cities" listKey="id" listValue="name" />
和
<s:select name="city" label="City" list="%{getCities()}" listKey="id" listValue="name" />
我们可以调用上面的动作方法,如果'是',那么正确的方法是什么?
感谢,
答案 0 :(得分:1)
list="cities"
和list="%{getCities()}"
两者完全相同。两者都会在操作类中调用List<City> cities
的getter来读取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&amp; b是相同的,因为%OGNL
评估。将查询特定属性的堆栈。
OGNL支持集合,这就是为什么我们可以使用这三个集合。
当我们使用特殊需要时,我们会调用行动。
例如
<s:url id="databaseList" action="fetch-citynames" />
<sd:autocompleter key="search"
href="%{databaseList}" name="searchText" />
此处fetch-citynames
返回json
列表。
实际上我是从here
中读到的
主要原因是因为%{}
语法用于强制OGNL评估,否则Struts会将该值视为字符串文字。
例如,
<s:property value="name" />
将在值栈中查找name属性,即通过调用getName()来检索值。
如果您想强制它使用字面值&#34; name&#34;,则需要使用%{}
语法 -
<s:property value="%{'name'}" />
但在<s:select list="" />
的情况下,它使用OGNL Collection Construction
以下是OGNL
调用方法的方式..请参阅here