【发布时间】:2021-06-02 14:08:44
【问题描述】:
我有一个下拉列表,根据选择,更新页面上的一些免责声明文本。下拉列表和免责声明都是其自己的面板(自己的标记和组件)。我想让它在第一次加载页面时不显示免责声明。每当从下拉列表中进行选择时,都会显示免责声明。
DropDownPanel.java
private boolean firstTimeLoaded = true;
...
disclaimerPanel = new DisclaimerPanel( "disclaimer", contactModel, firstTimeLoaded );
disclaimerPanel.setOutputMarkupId( true );
disclaimerPanel.setOutputMarkupPlaceholderTag( true );
...
dropDownChoice.getInternalComponent().add( new AjaxFormComponentUpdatingBehavior( "onchange" )
{
@Override
protected void onUpdate( AjaxRequestTarget ajaxRequestTarget )
{
// METHOD 1
disclaimerPanel = new Disclaimer( "disclaimer", contactModel, !firstTimeLoaded );
disclaimerPanel.setOutputMarkupPlaceholderTag( true );
disclaimerPanel.setOutputMarkupId( true );
// METHOD 2
// remove code from METHOD 1 as onConfigure should set visibility of DisclaimerPanel using addComponent
ajaxRequestTarget.addComponent( disclaimerPanel );
ajaxRequestTarget.addChildren( disclaimerPanel, Component.class );
}
DisclaimerPanel.java
private boolean firstTimeLoaded;
public DisclaimerPanel( String id, IModel<Contact> contactModel, boolean firstTimeLoaded )
{
...
this.firstTimeLoaded = firstTimeLoaded;
}
@Override
protected void onConfigure()
{
setVisible( !firstTimeLoaded );
}
我尝试了两种方法,但都不起作用(方法 1、方法 2)。从断点开始,onConfigure 第一次运行并正确隐藏了免责声明。当我做出选择时;但是,DisclaimerPanel 和 firstTimeLoaded 为 false 但 onConfigure 的构造函数不会被执行。我错过了什么?
提前致谢!
【问题讨论】:
-
您使用的是什么 Wicket 版本?如果是 8 或者从不,
AjaxFormComponentUpdatingBehavior( "onchange")需要改为AjaxFormComponentUpdatingBehavior( "change")。自 wicket 6.0 以来,他们对其进行了更改,因此您不再需要事件名称中的前导“on”。直到 wicket 8 他们都支持,因为 wicket 8.0 不再支持领先的“on”。 -
@OHGODSPIDERS 我相信它是版本 4 (1.4.23)