Wicket可以使用AJAXified下拉菜单吗?

时间:2010-10-08 19:14:39

标签: java javascript ajax wicket

我需要制作一个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来实现,但我现在意识到这不是那些做的。有没有办法切换组件是否在页面上?

3 个答案:

答案 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一个接受的答案。