Forms struts2中的预选选项(自由标记)

Forms struts2中的预选选项(自由标记),forms,select,struts2,tags,freemarker,Forms,Select,Struts2,Tags,Freemarker,我无法使freemarker struts2 select标记显示与对象相关的选项列表的默认值 在我的行动中,我有: private List<CodeLabel> modifRoomTypeOpt; 私有列表ModifyRomTypeOpt; 在内部,我有一个对象代码标签,它的值是S:Single,D:Double <@s.select id="123123" name="roomModif[2].type" value="${modifiedRoom.type

我无法使freemarker struts2 select标记显示与对象相关的选项列表的默认值

在我的行动中,我有:

private List<CodeLabel> modifRoomTypeOpt; 
私有列表ModifyRomTypeOpt;
在内部,我有一个对象代码标签,它的值是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,。。。和标签单,双,。。。所以对我的CodeLabel对象的迭代已经完成。但在我的选择中,第一个选项总是预选的。我检查了${modifiedRoom.type}的值及其“D”。
为什么不预选值为D的选项?

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

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

代码还没有经过测试,但我相信它应该可以工作。 供参考

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

我做了一些调查和代码调试,发现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"/>