美文网首页react程序员
基于ant design pro和spring boot、shi

基于ant design pro和spring boot、shi

作者: front_ui | 来源:发表于2019-01-24 17:11 被阅读0次

    对于java后端开发,写前端页面是非常痛苦的。技术全面点的能把东西做出来,但UI效果没法保证。技术不行的压根就搞不出来。支付宝开源的ant design简称antd虽然很好的解决了这个问题,但是更多的是被前端开发拿去提升效率。多数后端开发面对未知的学习成本,一般都懒得去了解。作为一名后端开发,我通过一周的学习,把之前做的一个java系统的ui全部用ant design pro重写。我想把这个过程总结一下,供更多的java后端开发人员学习。

    在阅读下面的文章之前,推荐各位阅读一下ant design的官方文档,对基本的概念有所了解。
    官方教程

    登录页面文件位于:src\pages\User\Login.js

    页面登录按钮点击事件代码:

      handleSubmit = (err, values) => {
        const { type } = this.state;
        if (!err) {
          const { dispatch } = this.props;
          dispatch({
            type: 'login/login',
            payload: {
              ...values,
              //type,
            },
          });
        }
      };
    

    通过dva调用login相关的model中的方法(文件路径src\models\login.js)

        *login({ payload }, { call, put }) {
          const response = yield call(trainingAccountLogin, payload);
          yield put({
            type: 'changeLoginStatus',
            payload: response,
          });
          // Login successfully
    
        },
    

    通过第二行 yield call 异步调用trainingAccountLogin方法,

    通过model文件中的import引入api.js文件中的与java后台通信的方法

    import { trainingAccountLogin,  } from '@/services/api';
    

    通过dva框架的封装,调用后端java方法变得异常简单。只需要下面几行代码就能完成一个ajax的异步请求,剩下的工作就是把传给后端的参数设置好。

    export async function trainingAccountLogin(params) {
      return request('/training/login/account', {
        method: 'POST',
        body: params,
      });
    }
    
    

    这个过程中最重要的就是数据的流转,页面中用户输入的用户名和密码通过antd封装的组件传递到login页面的handleSubmit方法中,也就是values对象。values对象是ant design pro封装的Login组件控制的,点击submit后就把用户名和密码的输入框中的数据封装成一个json对象,格式如下:

    {
      username: "admin",
      password: "123456"
    }
    

    这个json对象先被赋值给了values对象,通过handleSubmit方法放到payload对象中,然后调用dispatch方法、effect里的login方法,最后调用api中的trainingAccountLogin方法时,payload对象就通过参数传递变成了param对象。最后通过框架中的request方法发送到java后端处理。

    传给后端的参数是param对象,这里可以是raw json,也可以是封装好的FromData。对应的后端代码有所不同,对于后端开发来收这不是问题,此处就不细讲。

        //接收FormData的后端代码
        @PostMapping("/login")
        @ResponseBody
        public ResponseBo login(String username, String password, String code, Boolean rememberMe)
        //接收raw json的后端代码
        @PostMapping("/login/account")
        @ResponseBody
        public ResponseBo login(@RequestBody User user)
    
    

    数据发送到后端处理后,通过http的response返给前端处理。response的数据流跟request的正好相反,这些都是有dva控制,我们需要做的就是再model的代码里面处理返回的response。登录成功后,后端会返回如下的json结果

        {"msg":"操作成功","code":0,"currentAuthority":"admin"}
    

    前端这里只处理了code字段,只要code是0,就认为登录成功了,然后就做页面跳转。由于后端shiro是用的session验证,response里会将sessionid设置到cookie中,后续所有的请求都会自动带上cookie,java后端就认为这些请求是合法的请求。

         //(文件路径template\src\models\login.js)
         // Login successfully
          if (response.code === 0) {
            reloadAuthorized();
            const urlParams = new URL(window.location.href);
            const params = getPageQuery();
            let { redirect } = params;
            if (redirect) {
              const redirectUrlParams = new URL(redirect);
              if (redirectUrlParams.origin === urlParams.origin) {
                redirect = redirect.substr(urlParams.origin.length);
                if (redirect.match(/^\/.*#/)) {
                  redirect = redirect.substr(redirect.indexOf('#') + 1);
                }
              } else {
                window.location.href = redirect;
                return;
              }
            }
            yield put(routerRedux.replace(redirect || '/'));
          }
    

    相关文章

      网友评论

        本文标题:基于ant design pro和spring boot、shi

        本文链接:https://www.haomeiwen.com/subject/vlhujqtx.html