如何添加按钮调用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
相关产品推荐
相关产品推荐

