You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何添加按钮调用Java方法,按钮onSubmit、onclick均无法触发怎么办

问题原因

  • Wicket的表单提交逻辑要求HTML中的<form>标签必须绑定服务端对应的Form组件实例,你当前代码没有为HTML的form定义对应的Java组件,提交请求无法被Wicket路由到对应的按钮onSubmit方法。
  • 普通Button的客户端onclick属性调用的是前端JS方法,无法直接触发服务端的Java方法,要实现前端点击直接触发服务端逻辑可以改用AjaxButton。

修复方案(普通表单提交方式)

reschedule.java 调整后代码

// 先创建Form组件,绑定HTML的form标签
Form<?> rescheduleForm = new Form("rescheduleForm");
WebMarkupContainer rescheduleContainer = new WebMarkupContainer("reschedule");

Button addRescheduleBtn = new Button("addReschedule"){
     @Override
     public void onSubmit() {
         final Item i = getJtrac().loadItem(globalItem.getId());
         Calendar date = Calendar.getInstance();
         long timeInSecs = date.getTimeInMillis();
         Date rescheduleDateTime = new Date(timeInSecs + (20 * 60 * 1000));
         i.setNextExecutionTime(rescheduleDateTime);
         i.setStatus("ready");
         getJtrac().updateItem(i);
     }
 };

addRescheduleBtn.setDefaultFormProcessing(false);
rescheduleContainer.add(addRescheduleBtn);
rescheduleForm.add(rescheduleContainer);
// 把Form加到页面,而不是直接加容器
add(rescheduleForm);

reschedule.html 调整后代码

<!-- 给form添加wicket:id对应Java的Form组件 -->
<form wicket:id="rescheduleForm">
<div class="space-below" wicket:id="reschedule">
    <input type="submit" wicket:id="addReschedule" class="btn btn-primary" wicket:message="value:item_view.reschedule"/> 
</div>
</form>

可选方案(无表单刷新的Ajax提交方式)

如果不需要刷新整个页面,可以直接改用AjaxButton,不用依赖表单提交,点击后直接触发服务端逻辑:

AjaxButton addRescheduleBtn = new AjaxButton("addReschedule") {
    @Override
    protected void onSubmit(AjaxRequestTarget target) {
        // 原有逻辑不变
        final Item i = getJtrac().loadItem(globalItem.getId());
        Calendar date = Calendar.getInstance();
        long timeInSecs = date.getTimeInMillis();
        Date rescheduleDateTime = new Date(timeInSecs + (20 * 60 * 1000));
        i.setNextExecutionTime(rescheduleDateTime);
        i.setStatus("ready");
        getJtrac().updateItem(i);
    }
};

对应的HTML不需要调整,原有input标签即可直接使用。

内容的提问来源于stack exchange,提问作者Ken Che

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:15:03