在Struts2的s:select
标签教程中,我见过:
<s:select label="Pets"
name="petIds"
list="petDao.pets"
listKey="id"
listValue="name"
multiple="true"
size="3"
required="true"
value="%{petDao.pets.{id}}"
/> ^ ^
和我的问题:为什么value="%{petDao.pets.{id}}"
?为什么不简单value="%{petDao.pets.id}"
?那些尾随花括号的意思是什么?
答案 0 :(得分:5)
这是一个OGNL list projection,可以将所有id
值作为petDao.pets
的列表获取,这意味着此<s:select>
中的所有值都将被预先选中。
答案 1 :(得分:1)
没有必要;我怀疑这是标签源文件中出错的结果。
它可以使用它,但是不需要,IDE验证失败(如果IDE支持S2和/或OGNL,例如,IntelliJ),我已做了更新的注释。
答案 2 :(得分:0)
主要原因是因为%{}语法用于强制OGNL评估,否则Struts会将该值视为字符串文字。
例如,
<s:property value="name" />
将在值栈中查找name属性,即通过调用getName()来检索值。
如果您想强制它使用文字值“name”,则需要使用%{}语法 -
<s:property value="%{'name'}" />