[英]Can Wicket have AJAXified drop-down menus?
我需要用Wicket创建一个网页,该网页列出了下表:
+------------+---------+ | Category | Value | +------------+---------+ | CatA | ValA | +------------+---------+ | CatB | ValB | +------------+---------+ | CatC | ValC | +------------+---------+ | CatD | ValD | +------------+---------+ | CatE | ValE | +------------+---------+
该表中的每个项目(标题除外)都应该是一个下拉菜单。 有两个问题。 首先,每个值列表取决于其类别列表。 举一个简单的例子,CatA可能包含“运动”,“汽车”和“动物”作为选项。 然后,如果选择“运动”,则ValA会填充“棒球”,“足球”和“篮球”。 但是,如果选择“汽车”,则ValA会填充“沃尔沃”,“萨博”和“梅赛德斯”。
另一个问题是除非填充了行上方的行,否则不得显示行。因此,在页面加载时,只有CatA和ValA应该可见。 填充ValA之后,CatB和ValB变为可见。 如果填写了ValB,则出现CatC和ValC,&c。
我的问题是:这可以通过纯Wicket实现,最好是异步实现吗? 我已经看过Wicket API,但对它却不太熟悉,因此我很容易错过了符合我要求的类。 我的第一个想法涉及使用DropDownChoice
及其onSelectionChanged()
方法,但似乎并未进行AJAX化。
如果用Wicket绝对不可能发生这种情况,我会考虑使用JavaScript,但这确实是不得已的方法。
我不一定需要任何代码-它可能甚至无法工作,因为这实际上是从我的实际项目需求中精简而来的-但我希望将其指向有用的API类或现有的实现等。
编辑:
好的,donroby的答案在第一部分效果很好(使值取决于类别),但第二部分我仍然迷失了(隐藏行,直到所有前面的行都被填满)。 最初,我认为可以通过附加LoadableDetachableModel
来实现,但现在我意识到那不是这些。 有没有办法切换组件是否在页面上?
Wicket Ajax示例中的一些示例代码可能会有所帮助,尤其是Drop Down Choice Example 。
您绝对可以通过附加Ajax行为在Wicket中完成这种事情,并最大程度地减少为了实现它而必须编写的JavaScript数量。
它适用于检票口和Ajax。 创建表格单元格时,必须创建一个包含该DropDownChoice的检票口面板。 如果需要更新值,则必须更新下拉选择模型值并执行target.addComponent(DropDownChoice),其中target是AjaxRequestTarget。 另外,下拉选项必须将setOutputMarkupId设置为true才能更新。 我认为如果需要,我可以为您提供一些代码。
看起来第二部分的答案与在正确的时间调用从Component
继承的setVisible()
方法有关。 不过,仍然会给donroby接受的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.