我需要制作一个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
来实现,但我现在意识到这不是那些做的。有没有办法切换组件是否在页面上?
答案 0 :(得分:0)
Wicket Ajax examples的部分示例代码可能会有所帮助,尤其是Drop Down Choice Example。
你可以通过附加Ajax行为并最大限度地减少你自己编写的JavaScript数量来完成它,从而在Wicket中做到这一点。
答案 1 :(得分:0)
它适用于wicket和Ajax。创建表格单元格时,您必须创建一个包含DropDownChoice的窗口小组面板。如果需要更新值,则必须更新下拉选项模型值并执行target.addComponent(DropDownChoice),其中target是AjaxRequestTarget。此外,下拉选项必须将setOutputMarkupId设置为true才能进行更新。如果您需要,我想我可以帮助您使用一些代码。
答案 2 :(得分:0)
看起来第二部分的答案与在正确的时间调用从setVisible()
继承的Component
方法有关。尽管如此,仍然会给donroby一个接受的答案。