2017-09-15 196 views
1

我在数据库中有父级子关系的层次结构,并基于这些值,我需要添加新值。层次结构可能不同,需要动态显示下拉菜单。例如。假设我们有2个等级:北美洲>美国>加利福尼亚州和北美洲>美国> GWA>西雅图。因此,当我尝试添加新地点时,如果我选择第一级的NA,第二级的美国和第三级的加州,那么最后的下拉应该是加利福尼亚州儿童的地点。在其他情况下,如果我选择第一级的NA,第二级的美国,第三级的GWA,然后第四个下拉应该显示西雅图,最后的下拉应该是西雅图的孩子的位置。在JSF中动态获取多个下拉菜单

根据数据库中存在的值显示下拉数。我怀疑它可以使用ui完成:重复但我没有找到正确的方向。如果有人能够帮助任何积极的指针,那将是很棒的。

+0

那么它可以走10级深?或者更多?或最大4?它有多动态? – Kukeltje

+0

最大可能是12个级别 – whywake

+0

确定这是指导用户最友好的方式吗? – Kukeltje

回答

0

如果你能够使Map<K,V>地图 凡K=String(Id for value) and V= List<SomeObjectClass> SomeObjectClass =>String id, String Value

现在地图会看起来像重点

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>这将持有降你的选择值下拉列表。大小会告诉你需要显示多少下拉菜单。 将“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 

您需要添加选择的ID从下拉列表中列出,如果用户做出以前降大任于换下来删除,并从列表中删除所有元素。

例子:

在网页加载,则列表大小为1,你必须在0索引列表中添加0,现在你的用户界面会显示一个下拉菜单有,你有两个元素1,2地图谷; 如果您从下拉菜单中选择1或2,请将其添加到索引1的列表中,因为添加方法最后会添加。 现在你必须在UI重复下降,首先下拉将如何1,2和第二下拉将显示2.1,2.2,

现在,如果你有十个下拉和用户更改第五个下拉值,现在您需要循环播放列表,并且需要从6中删除元素,以便您列出6个值,并且您的UI将只显示6个下拉列表。

下面举

Edited: 

你的建议,我们可以通过一些方法,将给予降的下一个值下更换地图。正如@Kukeltje所建议的那样。

+2

有12个关卡和(假设)每个关卡有25个关卡,每个关卡的25^12个是5.9e16 **个项目**,如果每个项目是10个字节,那么总共有600个二进制字节或者60.000 terabytes(只是数据)...我会优化这个不添加2.1和2。2如果选择1只添加1.1和1.2,如果选择1.1,则只添加1.1.1和1.1.2。那么,如果每条记录都是10个字节,则最多需要25 * 12 = 300个条目和3KB数据。 – Kukeltje

+0

是需要改进代码,但这只是一个想法,想要了解一下我们如何做到这一点。即使我们可以用某种方法替换地图也会返回下一个列表,通过这种方式我们不需要地图。谢谢你的观点 –