Struts 2 - 使用迭代动态填充optgroup

时间:2012-11-26 16:55:31

标签: java drop-down-menu struts2 optgroup

我正在尝试为struts中的选择框动态填充一些optgroups。目的是将地图中任何驱动选择框控件的重复名称分组到他们自己的选项组中。

例如,我有3家公司:

  • Home Depot
  • 麦当劳
  • 沃尔玛

在我的数据库中,我有多个位置:

  • 家得宝
    -38393一些街道 -3839榆树街
  • 麦当劳
    -38393 Street Ave
    -38333测试街
    -393339 This Street
  • 沃尔玛 -3939 Street Ave

我只想让它们在我的下拉列表中使用选项组进行分组(仅当有多个地址时,否则我希望它们在下拉列表中正常显示) - 这可能与我找到的这个例子类似。我想做一些类似于下面的事情,但是optgroup必须以某种方式链接到选项。:

<s:select id="regionstate" name="state" list="stateMap">  
             <s:iterator value="region" status="regionStatus">  
                 <optgroup label="<s:property value="name" />">  
                         <s:iterator value="states" status="stateStatus">  
                             <option value="<s:property value="id" />"><s:property value="name" /></option>  
                         </s:iterator>  
                 </optgroup>  
     </s:iterator>  

我实际上并没有实现上面的代码,但我认为与我的问题相关的示例问题是看起来区域和状态没有链接。

我有:   - 我的重复项(名称)列表,它将填充optgroup的label属性,以及   - 包含每个项目的适当值(下拉值)和每个项目的地址(显示给用户)的地图

我不确定我想要达到的目标是否可行,但看起来它应该是非常简单的。我希望我只需要一点方向,而且我只缺少一小部分谜题。

提前感谢您的帮助!

它应该看起来像这样,我想:

  • - 选择
    • optgroup 1
      • 选项
      • 选项
        -optgroup 2
      • 选项
      • 选项
      • 选项
        -optgroup 3
      • 选项
      • 选项

很抱歉所有与编辑混淆。 我理解它的方式,选择框内的选择组将是重复名称的列表(麦当劳,家得宝,沃尔玛)。每个optgroup中的每个选项都与该特定名称相关联。因此,例如,麦当劳的optgroup可能有多个与之相关的选项。


好吧,假设我有公司课。该类有3个属性:id,name和address。以下是我期望渲染的选择框的外观:

<select name="companies">
    <option value="1a">Company 1</option>
    <option value="2a">Company 2</option>
    <optgroup label="Company 3">
        <option value="3a">38373 Street Ave</option>
        <option value="3b">38393 Town St</option>
    </optgroup>
    <optgroup label="Company 4">
        <option value="4a">990300 Street Ave</option>
        <option value="4b">99093 Town St</option>
        <option value="4c">99093 Town St</option>
    </optgroup>
</select>
  • 我有一张地图,其中每个公司的ID和公司名称都是唯一的(公司1和公司2)。通过s:select标记的list属性填充。
  • 我希望我需要为每个重复的项目(公司3和公司4)列出公司名称,以便为每个optgroup填充optgroup标签属性。我的假设是列表中的每个项目都需要与其中一个地图相对应。这将需要迭代器来动态创建多个optgroups
  • 我还希望我需要一个不同的地图,其中包含每个重复项目(公司3和公司4)的ID和公司地址。这还需要一个迭代器来动态创建每个optgroup中的多个选项。

也许我传达的问题是我需要处理3位数据,所以我不确定只使用地图就可以了。就像我说的那样,很可能我错过了这个谜题,或者我假设的设计存在缺陷。

1 个答案:

答案 0 :(得分:3)

试试以下代码可能对您有帮助。

    <s:select id="regionstate" name="state" list="stateMap">  
                 <s:iterator value="region" status="regionStatus">  
                     <optgroup label="%{name}">  
                             <s:iterator value="states" status="stateStatus">  
                                 <option value="%{id}"> %{name}</option>  
                             </s:iterator>  
                     </optgroup>  
               </s:iterator>
    </s:select>