【问题标题】:Struts2 select tag - Dynamically add optionsStruts2 选择标签 - 动态添加选项
【发布时间】:2016-05-25 20:18:14
【问题描述】:

我正在将一个 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 选择标签实现类似的功能。

AFAIK,Struts2 选择标签甚至无法与纯 html 选项标签一起正常工作。

【问题讨论】:

  • 你不需要带有select标签的逻辑操作,只需将逻辑移动到action中即可。
  • @RomanC 在不移动逻辑的情况下,有没有办法做到这一点?
  • 你可以这样做,但没有选择标签。
  • 请把条件(即使是假的,但和你的差不多)放在标签里,我来回答
  • @AndreaLigios 我不明白你为什么需要他们回答这个问题。

标签: jsp struts2 struts


【解决方案1】:

确实 Struts2 select 标签不允许在标签正文中使用 html option 标签。这是因为它使用list 属性以具有键/值对的对象的形式提供数据。您可以使用listKeylistValue 来定义对象的哪些属性将用于呈现选项。您可以查看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 小部件。您还可以使用自动完成器作为选择框或选择小部件作为自动完成器。您可以在Struts2 Jquery Showcase 中看到selectautocompleter 小部件的所有示例。

当从 Struts1 迁移到 Struts2 时,您会遇到呈现呈现的 html select 标签的问题,因为 Struts2 不允许标签主体内的选项。因此可以在操作的prepare() 方法中构建选项列表。您可以通过阅读 this answer 找到此用例的示例。

为什么这种方法更可取,因为您是从控制器处理模型,而不是从视图,并且当模型准备好显示时,您正在使用一些用于呈现 html 或填充 DOM 的标签或小部件。或者,您可以使用 Ajax 或 Angular 服务从 Struts2 控制器加载模型。数据以 JSON 格式传输。 JSON 是在 Java 和 JavaScript 框架之间传输数据的非常强大的工具。


现在如果你还想使用地图通过迭代器渲染htmlselect标签,你可以使用下面的代码。

<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

【讨论】:

    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 2018-07-25
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    相关资源
    最近更新 更多