我在jsp中有这个慢代码:
<form:options itemLabel="name" itemValue="id" items="${view.users}" />
当我用
替换它时<c:forEach items="${view.users}" var="user">
<form:option value="${user.id}">${user.name}
</form:option>
</c:forEach>
对性能有很大影响。我能理解为什么?这是因为 view.users 复杂对象的集合吗?
答案 0 :(得分:1)
正如Spring
documentation中针对<options>
标记所述,
option标签与options标签的组合使用会生成相同的标准HTML,但允许您在JSP中显式指定仅用于显示的值(它所属的位置),例如示例中的默认字符串: “ - 请选择”。
items属性通常使用项目对象的集合或数组填充。如果指定,itemValue和itemLabel只是引用那些项目对象的bean属性;否则,项目对象本身将被字符串化。或者,您可以指定项目的地图,在这种情况下,地图关键字被解释为选项值,地图值对应于选项标签。如果恰好也指定了itemValue和/或itemLabel,则item value属性将应用于map键,而item label属性将应用于map值。
这里,Spring
正在检查bean属性,在呈现给实际的HTML之前,类型转换已完成。因此,这使得许多后台工作为开发人员提供干净的代码(这是以性能为代价的)。
因此,如果没有特定的要求/逻辑来显示选项,则更喜欢基本的HTML <option>
标记。