在 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 所建议的那样。
我在数据库中有一个父子关系层次结构,基于这些值,我需要添加新值。层次结构可能不同,下拉列表需要动态显示。例如。假设我们有 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 所建议的那样。