1

问题与 Wicket 1.6 有关

我有一个向导步骤,其中包括一个 Textfield 组件。当我按下 Enter 键时,这将由向导栏的默认按钮(“下一步”)处理,并进入向导的下一步。我不希望这种情况发生。当我在文本字段上按 Enter 时,我只想更新值,但保持在同一页面上。

我尝试覆盖onBeforeRender()我的 Wizard 类的方法,如您所见,它将包含表单的默认按钮设置为 null。但是,现在这会导致当我按 Enter 时触发“上一个”按钮,因此向导会返回上一步。

public class ConfigurationWizard extends Wizard {

   ....

   @Override
   protected void onBeforeRender()
    {
        super.onBeforeRender();
        Component buttonBar = getForm().get(BUTTONS_ID);
        if (buttonBar instanceof IDefaultButtonProvider)
        {
            getForm().setDefaultButton(null);
        }
    }
}

所以基本问题是,如何禁用向导的默认按钮行为?

4

3 回答 3

6

我的方法(具有良好的 Wicket 行为)

用法

TextField<String> myField = new TextField<String>("myField", myModel());
myField.add(new PreventSubmitOnEnterBehavior());

行为

public class PreventSubmitOnEnterBehavior extends Behavior
{
    private static final long serialVersionUID = 1496517082650792177L;

    public PreventSubmitOnEnterBehavior()
    {
    }

    @Override
    public void bind( Component component )
    {
        super.bind( component );

        component.add( AttributeModifier.replace( "onkeydown", Model.of( "if(event.keyCode == 13) {event.preventDefault();}" ) ) );
    }
}
于 2015-09-25T09:56:00.313 回答
2

这与向导按钮无关。

当按下 Enter 键时, TextField<input>正在提交表单。这是<input>元素的标准行为。

解决方案是捕获 Enter 键<input>并阻止默认行为 这一点 javascript 魔术对我有用:

   <script type="text/javascript">
   $(document).ready(function() {
             $("#gridDiv").delegate("input","keypress",function(e){
                 if(e.originalEvent.keyCode == 13){
                     e.preventDefault();
                 }
              });
          });
   </script>

其中 'gridDiv' 是<div>包含 TextField的 id

于 2013-11-01T16:33:49.460 回答
0

我更喜欢另一种方法:

我对需要的每个按钮都使用 AjaxButtons,并在覆盖的 onSubmit() 中使用特定的提交代码:

AjaxButton linkSubmit = new AjaxButton("linkSubmit")
@Override
public void onSubmit(AjaxRequestTarget target, Form form) {
super.onSubmit();
// Submit code goes here....
// ...
setResponsePage(new NewPage());
}
@Override
public void onError(AjaxRequestTarget target, Form form) {
}
};

我的表单不需要“onSubmit()”方法。

并且标记没有任何提交按钮。所有按钮的编码如下:

使用这种方法,您不需要弄乱 javascript 代码。如果您按 Enter,该页面将不会执行任何操作。您必须单击按钮才能提交每个按钮。

希望这可以帮到你。

于 2014-10-31T14:14:34.630 回答