如何根据前一个组合框的内容更改组合框的内容?
我有一个包含两个组合框的页面。我想以一种方式制作它们,当我更改第一个组合框时,从数据库获取的第二个组合框的内容也会更改。我该怎么做呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我有一个包含两个组合框的页面。我想以一种方式制作它们,当我更改第一个组合框时,从数据库获取的第二个组合框的内容也会更改。我该怎么做呢?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(1)
执行此类操作的通常方法是通过 AJAX。您可以轻松地将 AJAX 行为添加到第一个
DropDownChoice
中,以便填充/刷新第二个DropDownChoice
的选项。假设您正在使用
IModel
来获取两个DropDownChoice
的选择。获取第二个DropDownChoice
选项的IModel
将使用第一个DropDownChoice
的 ModelObject(因为它是依赖的)。您可以附加
AjaxFormComponentUpdatingBehavior
到第一个DropDownChoice
。这将在例如,对于包含国家和城市的 2 个相关选择:
如果您没有使用
IModels
进行选择(即在构造函数中使用List
对象),您将只需要在onUpdate
方法中获取新的List
,并使用 ddcCity href="http://wicket.apache.org/apidocs/1.4/org/apache/wicket/markup/html/form/AbstractChoice.html" rel="nofollow">setChoices()
< /a>.您可以使用getComponent()
方法。如果您想支持没有 javascript 的用户,您应该添加一个默认禁用处理的提交按钮(也许在
标记中?),并在按钮的
中执行相同的逻辑>onSubmit
。有关其他参考,请参阅此 DropDownChoice 示例 Wicket wiki 页面,您可能会找到“ Ajax”部分很有趣。
The usual way to perform this kind of operations is through AJAX. You can easily add an AJAX Behavior to the first
DropDownChoice
in order to populate/refresh the choices of the secondDropDownChoice
.Let's say you are using
IModel
s to get the choices of bothDropDownChoice
s. TheIModel
that gets the choices for the secondDropDownChoice
would be using the firstDropDownChoice
's ModelObject (because it is dependent).You can attach an
AjaxFormComponentUpdatingBehavior
to the firstDropDownChoice
. That will output anonchange
HTML event handler on the<select>
tag, such that it will update thatDropDownChoice
's model object with the selected value, and then will call your Behavior'sonUpdate()
. In theonUpdate()
method, you will only have to add the secondDropDownChoice
to theAjaxRequestTarget
to write it back through the ajax response with the updated options. Remember to usesetOutputMarkupId(true)
on all components you'll be adding to theAjaxRequestTarget
.For instance, for 2 dependent selects with countries and cities:
In case you're not using
IModels
for your choices (i.e. usingList
objects in the constructors), you'd just need to get the newList
in theonUpdate
method, and set it toddcCity
withsetChoices()
. You can get theComponent
the Behavior is bounded to with thegetComponent()
method.In case you want to support users without javascript, you should add a submit button (maybe in a
<noscript>
tag?) with default from processing disabled, and perform that same logic in the button'sonSubmit
.For additional reference, see this DropDownChoice Examples Wicket wiki page, you might find the "Ajax" section interesting.