BJUI使用ajax异步表单提交时后台action要加@ResponseBody

场景

在使用BJUI的ajaxform异步表单提交时,后台直接使用

@RequestMapping时不能正常回显消息。

知识储备

ajaxform异步表单提交

通过data属性使用(带验证):

<form action="../../json/ajaxDone.json" data-toggle="ajaxform">
    <h5>Data API Ajax提交表单1(带验证)</h5>
    <div class="bjui-row col-2">
        <label class="row-label">姓名</label>
        <div class="row-input"><input type="text" name="username" data-rule="required"></div>
        <label class="row-label">住址</label>
        <div class="row-input"><input type="text" name="address" data-rule="required"></div>
    </div>
    <hr style="margin:5px 0 15px;">
    <div class="text-center">
        <button type="submit" class="btn-default">提交表单</button>
    </div>
</form>

通过JS API属性使用(无验证):

BJUI.ajax('ajaxform', {
    url: 'json/ajax/ajax-test1.json',
    form: $.CurrentNavtab.find('form:eq(1)'),
    validate: false,
    loadingmask: true,
    okCallback: function(json, options) {
        console.log('返回内容1:\n'+ JSON.stringify(json))
    }
})

参数:

 

名称类型默认值描述
urlstringnull[必选] 提交的URL,未指定时将取form的action属性。
typestringPOST[可选] ajax请求方式,未指定该参数时会取form的method属性值。
confirmMsgstringnull[可选] 提交表单前的确认提示。
beforeSubmitfunction(form)null[可选] 执行动作前的确认函数,返回false时不提交表单。
validate1.31booleantrue[可选] 提交表单前是否需要验证(需要验证插件nicevalidate支持)。
alertmsgbooleanfalse[可选] 是否弹出验证未通过的信息提示。
okalertbooleantrue[可选] 请求正常返回后,是否弹出相应的信息提示。
callbackfunction(json)null[可选] 自定义回调函数。
okCallbackfunction(json, options)null[可选] 请求成功时的回调函数,该函数会覆盖B-JUI默认的成功回调函数,函数的options参数即是该doajax的options参数。
okAfterCallbackfunction(json, options)null[可选] 请求成功时的回调函数,该函数会在B-JUI默认的成功函数后执行,函数的options参数即是该doajax的options参数。
errCallbackfunction(json, options)null[可选] 请求失败时的回调函数,函数的options参数即是该doajax的options参数。
failCallbackfunction(msg, options)null[可选] ajax请求出错时的回调函数,函数的msg参数是服务端返回的出错信息,options参数即是该doajax的options参数。
formselectornull[可选] 要提交的表单,通过JS API使用时需要。
loadingmaskbooleantrue[可选] ajax请求时是否显示数据加载遮罩。
targetselectornull[可选] 数据加载遮罩的父容器,值为空时默认是当前Navtab或Dialog。
reloadbooleanfalse[可选] 请求返回成功状态后,是否重新加载当前target。
forwardstringnull[可选] 跳转地址,请求返回成功状态后,加载forward地址对应的内容到当前target。
forwardConfirmbooleanfalse[可选] 请求返回成功状态后,是否重新加载当前target。
closeCurrentbooleanfalse[可选] 请求返回成功状态后,是否关闭当前target(仅navtab或dialog)。
tabidstringnull[可选] 请求返回成功状态后,需要刷新的navtab的id集合,多个id以,分隔。
dialogidstringnull[可选] 请求返回成功状态后,需要刷新的dialog的id集合,多个id以,分隔。
dividstringnull[可选] 请求返回成功状态后,需要刷新的div(仅限通过doload加载的div)的id集合,多个id以,分隔。
datagridsstringnull[可选] 请求返回成功状态后,需要刷新的datagrid的id集合,多个id以,分隔。
gridrefreshflagbooleantrue[可选] 刷新datagrid时保留其快速筛选、排序、分页信息。
ajaxTimeoutintBJUI.ajaxTimeout[可选] 请求超时设置,即$.ajax的timeout属性。

 

请求返回成功状态
指服务端返回B-JUI的消息JSON并在json[BJUI.keys.statusCode] == BJUI.statusCode.ok时有效。


 

@ResponseBody

@ResponseBody是作用在方法上的,@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中,一般在异步获取数据时使用【也就是AJAX】,在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中。 比如异步获取 json 数据,加上 @ResponseBody 后,会直接返回 json 数据。@RequestBody 将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。

举例:

@RequestMapping("/login")
  @ResponseBody
  public User login(User user){
    return user;
  }
  User字段:userName pwd
  那么在前台接收到的数据为:'{"userName":"xxx","pwd":"xxx"}'

  效果等同于如下代码:
  @RequestMapping("/login")
  public void login(User user, HttpServletResponse response){
    response.getWriter.write(JSONObject.fromObject(user).toString());
  }

后台实现

前端BJUI页面:

<form id="RechargeRecordForm" action="${ctx}/sys/cooperativePartnersManageAction/doRecharge"
  data-toggle="ajaxform"
  class="ajaxForm" data-toggle="validate" enctype="multipart/form-data">



<li><button type="submit" class="btn-default" data-icon="save" >提交</button></li>

后台action:

@Controller
@RequestMapping("/sys/cooperativePartnersManageAction")
public class SysCooperativePartnerManageAction  extends BaseAction{

...

@ResponseBody
 @RequestMapping(value="/doRecharge")
 public Map<String, Object> doRecharge(Integer partnerId,BigDecimal rechargeMoney ) {
  ModelAndView mv = null;
  Map<String, Object> jsonResult = null;
  ...
  业务代码省略
   Integer statusCode = 200;
   String msg = "成功";
   jsonResult = JsonResult.jsonReturn(statusCode, msg, tabid);
   mv.setViewName(ModelAndViewConstants.PARTNER_RECHARGE_VIEW);
   LogService.getInstance(this).debug("成功:"+ModelAndViewConstants.PARTNER_RECHARGE_VIEW);
  }
  catch(Exception ex) {
   LogService.getInstance(this).error("失败:" + ex.getMessage(), ex);
   mv = new ModelAndView(ModelAndViewConstants.ERROR_VIEW);
  }
  return jsonResult;
 }

 

注意:

在BJUI使用ajax异步表单提交时,提交到后台的action要加@ResponseBody,不然不能成功回显。

 

 

 

 

 

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霸道流氓气质

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值