0

我无法让我的 freemarker struts2 选择标签显示与对象相关的选项列表的默认值。

在我的行动中,我有:

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 的选项?

4

2 回答 2

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"/>
于 2013-01-25T11:31:29.337 回答
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

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

于 2012-07-09T08:28:41.773 回答