struts2中的预选选项(freemarker)

时间:2012-06-29 12:11:45

标签: forms select struts2 tags freemarker

我无法使我的freemarker struts2 select tag显示对象相关列表的默认值。

在我的行动中,我有:

private List<CodeLabel> modifRoomTypeOpt; 

里面我有对象CodeLabel,其值如S:Single,D:Double,...

<@s.select id="123123"
  name="roomModif[2].type"
  value="${modifiedRoom.type}"
  list="modifRoomTypeOpt" listKey="code" listValue="label"/>

在生成的html中,我可以看到值为S,D,T,...的标签,以及标签Single,Double,...所以迭代完成了我的CodeLabel对象。但在我的选择中,第一个选项总是被预选。我检查了$ {modifiedRoom.type}及其'D'的值。 为什么没有预先选择值为D的选项?

2 个答案:

答案 0 :(得分:1)

有趣的,

我做了一些调查和代码调试,发现 value 属性被评估为OGNL变量。这意味着Struts2在堆栈中查找与您在 value 属性中放置的字符串匹配的变量。

在内部,评估结果将作为 nameValue 放入属性列表中。

因此,我惊奇地发现使用属性 nameValue 而不是 value 是一个很好的解决方法,可以使用给定值预先选择一个select元素。

在你的情况下:

<@s.select id="123123"
name="roomModif[2].type"
nameValue="${modifiedRoom.type}"
list="modifRoomTypeOpt" listKey="code" listValue="label"/>

或者:

<@s.select id="123123"
name="roomModif[2].type"
nameValue=modifiedRoom.type
list="modifRoomTypeOpt" listKey="code" listValue="label"/>

答案 1 :(得分:0)

要设置默认值,您需要设置select标记的value属性,例如:

<@s.select id="123123"
name="roomModif[2].type"
value="${modifiedRoom.type}"
list="modifRoomTypeOpt" listKey="code" listValue="label"
value="modifRoomTypeOpt.get(1)"   />

代码尚未经过测试,但我相信它应该可行。 供参考使用http://struts.apache.org/2.0.12/docs/select.html

如果要在select元素上设置默认标头,请使用headerKey和headerValue属性。