【问题标题】:How can I produce a select tag using JSTL or Standard Actions in a JSP如何在 JSP 中使用 JSTL 或标准操作生成选择标记
【发布时间】:2011-01-15 06:43:16
【问题描述】:

我想在 JSP 中创建一个选择标记,其中选项是一个枚举(例如,所有美国州)。它们是 JSTL 中的标记还是可以执行此操作的标准标记,而无需手动遍历列表?

【问题讨论】:

  • 您应该在此处进一步澄清“手动”一词。您还应该澄清 c:forEach 有什么问题。它也可以动态迭代列表,而无需事先知道项目的数量。

标签: java html jsp jstl


【解决方案1】:

当然,在JSTL(只需将jstl-1.2.jar 放入/WEB-INF/lib)中有c:forEach 标签。您只需要将(老式的)Enumeration 转换为现代的 ListEnum,如果它是用 Java 硬编码的。如果要从不可更改的第 3 方 API 获取 Enumeration,如有必要,您可以为此获取 Collections#list()

这是一个如何使用<c:forEach> 的演示:

<select name="country">
   <c:forEach items="${countries}" var="country">
       <option value="${country.code}" ${param.country eq country.code ? 'selected' : ''}>${country.name}</option>
   </c:forEach>
</select>

${countries} 应该引用 List&lt;Country&gt;Country[],它们已被放入 pagerequestsessionapplication 范围中的任何一个中——其中 application 范围是最直接的选择,因为国家列表应该是一个应用程序范围的常量。您可以使用ServletContextListener 加载一次并在应用程序启动时放入应用程序范围。在此示例中,Country 只是一个具有至少两个属性的 Javabean(模型)类。

另见:

【讨论】:

    【解决方案2】:

    JSTL 中没有。然而,许多框架都提供了这样的附加标签:

    【讨论】:

    • 没有?他只是不想手动遍历列表。或者我们都必须对“手动”有另一种解释。无论如何,要完成列表,在 JSF 中有一个 h:selectOneMenu
    • 我将使用 Struts2。我忘了我可以使用 struts 标签,而不使用 Struts 框架。
    • @BalusC - 我理解“手动”的意思是“c:forEach”,但它很可能意味着其他任何东西。
    猜你喜欢
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    相关资源
    最近更新 更多