Struts2选择标记 - 动态添加选项
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts2选择标记 - 动态添加选项相关的知识,希望对你有一定的参考价值。
我正在努力将Struts1项目迁移到Struts2。我遇到了以下代码。
<html:select ...>
<logic:iterate id="something" name="" type="">
<logic:equal name="something" property="" value="">
<html:option value=""><bean:write ... /></html:option>
</logic:equal>
</logic:iterate>
</html:select>
它会检查迭代器中的值,并在满足条件时动态地向选择列表添加选项。
如何使用Struts2 select标签实现类似的功能。
AFAIK,Struts2 select标签甚至无法使用普通的html选项标签。
确实Struts2 select
标签不允许在标签的正文中使用html option
标签。这是因为它使用list
属性以具有键/值对的对象的形式提供数据。您可以使用listKey
和listValue
来定义对象的哪些属性将用于渲染选项。您可以看到select
标签的UI标签参考指南。它有许多属性,允许您自定义渲染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
小部件。您还可以将自动填充程序用作选择框,或选择窗口小部件作为自动填充程序。你可以在select
看到所有autocompleter
和Struts2 Jquery Showcase小部件的例子。
从Struts1迁移到Struts2时,您遇到了呈现渲染的html select
标记的问题,因为Struts2不允许标记正文中的选项。因此,可以在行动的prepare()
方法中构建选项列表。您可以通过阅读this answer找到此用例的示例。
为什么这种方法更可取,因为您正在使用控制器中的模型而不是视图,并且当模型准备好显示时,您正在使用某些标记或小部件来呈现html或填充DOM。或者您可以使用Ajax或Angular服务从Struts2控制器加载模型。数据以JSON格式传输。 JSON是在Java和javascript框架之间传输数据的非常强大的工具。
现在,如果您仍想使用地图通过迭代器呈现html select
标记,则可以使用以下代码。
<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变量。见How we use JSTL with the framework。
以上是关于Struts2选择标记 - 动态添加选项的主要内容,如果未能解决你的问题,请参考以下文章