我有一种情况,我试图在Wicket 6 ModalWindow上显示输入表单。
目前,这是一个非常简单的表单,其中有一个组中有三个单选按钮,用于使工作正常。
// in TestPanel.class, the content of TestDialog:
protected void onInitialize() {
super.onInitialize();
RadioGroup<Integer> group = new RadioGroup<Integer>( "group", _model );
getForm().add( group );
group.add( new AjaxRadio<Integer>( "g1", Model.of( 1 ) ) {
private static final long serialVersionUID = 1L;
@Override
protected void onInputChanged( AjaxRequestTarget target ) {
System.out.println( getMarkupId() + " clicked, Input is now " + _model.getObject() );
}
});
// + 2 more other similar radio buttons..
}
(AjaxRadio只是一个带有AjaxEventBehavior(&#34; onchange&#34;)的Radio,它找到父无线电组并调用group.processInput后跟onInputChanged)
如果我在正常情况下显示此对话框(例如onClick on a AjaxLink),则对话框显示正常并且模型已正确更新。
actionsForm.add( new AjaxLink<Object>( "link" ) {
private static final long serialVersionUID = 1L;
@Override
public void onClick( AjaxRequestTarget target ) {
TestDialog dialog = getDialog( TestDialog.class, target );
dialog.show( target );
}
} );
g1182 clicked, Input is now 1
g2183 clicked, Input is now 2
g3184 clicked, Input is now 3
如果我在AjaxSelfUpdatingTimerBehavior.onPostProcessTarget中显示对话框,表单组件模型永远不会更新!
protected void onInitialize() {
super.onInitialize();
add( new AjaxSelfUpdatingTimerBehavior( Duration.ONE_SECOND ) {
private static final long serialVersionUID = 1L;
@Override
protected void onPostProcessTarget( AjaxRequestTarget target ) {
if( displayDialog() && dialogNotDisplayedYet() ) {
TestDialog dialog = getDialog( TestDialog.class, target );
dialog.show( target );
}
}
});
}
getDialog创建ModalWindows并将它们添加到组件树中。我尝试在需要时添加对话框(如上所述)或在onInitialize期间创建对话框,然后只在onPostProcessTarget中显示。没有区别。
g1182 clicked, Input is now null
g2183 clicked, Input is now null
g3184 clicked, Input is now null
我正在使用wicket 6.19.0和Java 7
实施的原因 - 我将做一个很长的导入任务,有时可能需要向用户询问一个问题,因此行为将扫描问题并在任务等待答案时显示对话框。
请有人帮我这个吗?
答案 0 :(得分:0)
发现问题。
基本上,在屏幕上存在AjaxSelfUpdatingTimerBehavior的任何情况下都会失败。这是因为onTimer实现将组件添加到目标,无论如何,我不想这样做,因为这会重置所有输入。由于它的持续时间为1秒,因此在重新选择所有选项之前没有机会关闭对话框。
如果我用AbstractAjaxTimerBehavior替换它,它可以正常工作,虽然我认为以后当我需要停止计时器时可能会出现问题。