在 JSF 中动态获取多个下拉列表

Getting multiple drop down dynamically in JSF

我在数据库中有一个父子关系层次结构,基于这些值,我需要添加新值。层次结构可能不同,下拉列表需要动态显示。例如。假设我们有 2 个层次结构:北美>美国>加利福尼亚和北美>美国>GWA>西雅图。因此,当我尝试添加新位置时,如果我在第一级 select NA,在第二级为 USA,在第三级为 California,那么最后一个下拉列表应该是 California 的子位置。在其他情况下,如果我 select NA 在第一级,USA 在第二级,GWA 在第三级,那么第四个下拉列表应该显示西雅图,最后一个下拉列表应该是西雅图的子位置。

根据数据库中存在的值显示下拉列表的数量。我怀疑是否可以使用 ui:repeat 来完成,但我没有找到正确的方向。如果有人可以提供任何积极的建议,那就太好了。

如果你能制作Map<K,V>地图 其中 K=String(Id for value) and V= List<SomeObjectClass> SomeObjectClass=> String id, String Value.

现在 Map 看起来像 Key

Key    Value
1      1.1,1.2
2      2.1,2.2
1.1    1.1.1,1.1.2
1.2    1.2.1,1.2.2
2.1    2.1.1,2.1.2
2.2    2.2.1,2.2.2

所以如果我使用键 1.1 我会得到 1.1.1, 1.1.2

的列表

List<ID> 这将保留您从下拉列表中 selected 的值。尺寸会告诉您需要显示多少下拉菜单。 将 “0” 放在列表中的索引 0 处,列表不应为空。现在遍历列表并显示下拉列表的数量作为列表的大小。 下拉值将来自 map.get(K).

UI:repeat over List<ID>  var=varlistId (You know how)

Dropdown: value=#{map.get(VarID)} iteamlevel=” somevariable.level” ItemValue=”somevariable.id” var=”somevariable”    DropDown END

UI:repeat END

您需要将 selected Id 从下拉列表添加到列表,如果用户在之前的下拉列表中进行任何更改则将其删除,并从列表中删除所有元素。

示例:

在页面加载时,您的列表大小将为 1,您已在列表的 0 索引处添加 0,现在您的 UI 将显示一个带有地图值的下拉菜单,其中您有两个元素 1,2; 如果您从下拉列表中 select 1 或 2,请将其添加到索引 1 的列表中,因为添加方法将在最后添加。 现在你必须在 UI 重复下拉,第一个下拉将显示 1,2,第二个下拉将显示 2.1,2.2,

现在,如果您有 10 个下拉列表并且用户更改了第 5 个下拉列表中的值,现在您需要遍历列表并需要从第 6 个中删除元素,这样您的列表就有 6 个值并且您 UI 将显示只有 6 个下拉。

在下面给出您的建议

Edited:

我们可以通过某种方法替换地图,该方法将为下拉菜单提供下一个值。正如@Kukeltje 所建议的那样。