从jsp调用一个action方法

时间:2014-05-29 13:20:27

标签: java struts2 ognl

简单地说..我需要知道这些列表属性是否在做同样的工作。

<s:select name="city" label="City" list="cities" listKey="id" listValue="name" />

<s:select name="city" label="City" list="%{getCities()}" listKey="id" listValue="name" />

我们可以调用上面的动作方法,如果'是',那么正确的方法是什么?

感谢,

1 个答案:

答案 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列表。

另见this link

实际上我是从here

中读到的

ognl

主要原因是因为%{}语法用于强制OGNL评估,否则Struts会将该值视为字符串文字。

例如,

  <s:property value="name" />

将在值栈中查找name属性,即通过调用getName()来检索值。

如果您想强制它使用字面值&#34; name&#34;,则需要使用%{}语法 -

 <s:property value="%{'name'}" />

但在<s:select list="" />的情况下,它使用OGNL Collection Construction

以下是OGNL调用方法的方式..请参阅here