实际上,Struts2
select标签不允许在
option标签正文中使用html
标签。这是因为它使用
list属性以具有键/值对的对象形式提供数据。您可以使用
listKey和
listValue定义对象的哪些属性将用于呈现选项。您可以查看《
UI标签参考指南》中的
select标签。它具有许多属性,可让您自定义呈现html。
select标记的实际用法:很少使用。如果要显示固定大小的列表或在JSP中通过OGNL创建的地图,这将很有用。例如
<s:select label="Months" name="months" headerKey="-1" headerValue="Select Month" list="#{'01':'Jan', '02':'Feb', [...]}" value="selectedMonth" required="true"/>对于大列表,请考虑使用
autocompleter小部件。您还可以使用自动完成程序作为选择框,或选择小部件作为自动完成程序。您可以在Struts2Jquery Showcase中看到的所有示例
select和
autocompleter小部件。
从Struts1迁移到Struts2时,您会遇到呈现呈现的html
select标签的问题,因为Struts2不允许在标签主体内使用选项。因此,可以通过
prepare()操作方法来构造选项列表。您可以通过阅读此答案找到此用例的示例。
为什么选择这种方法是可取的,因为您是 从控制器 而不是从视图中使用模型,并且当模型 准备
显示时,您正在使用一些标签或小部件来呈现html或填充DOM。或者,您可以使用Ajax或Angular服务从Struts2控制器加载模型。数据以JSON格式传输。JSON是在Java和Javascript框架之间传输数据的非常强大的工具。
现在,如果您仍想使用地图
select通过迭代器呈现html 标签,则可以使用以下代码。
<select id="monthId" name="form.monthId"> <s:iterator var="month" value="%{months}"> <s:if test="month.value != 'May'"> <option value="${month.key}" ${month.key == form.monthId?'selected="selected"':''}> <s:property value="%{month.value}"/> </option> </s:if> </s:iterator></select>请注意,由于Struts请求包装程序,用于预选选项的EL表达式应有权访问valueStack变量。请参阅我们如何在框架中使用JSTL。



