若依框架学习笔记:不使用AjaxResult返回前端导致的form表单无法填入数据

1. 前端页面使用中的问题
1.1 点击更新操作按钮点击两次才能弹出对话框
1.2 对话框中的输入框不能进行输入

查错过程

首先检查了表单校验rules是否无误和表单对象form{}是否存在在data()中,其次检查了更新操作handleUpdate()执行流程是否正确,在此过程中发现:this.form = response.data 语句没有起作用,表单中没有对应数据,在开发者工具中查询到getSubject()已从数据库中查询到数据并且成功返回,但是表单中没有数据,将this.form = response.data注释掉后,点击一次修改按钮就能弹出对话框,并且能在输入框中输入数据。

    /** 修改按钮操作 */
    handleUpdate(row) {
      this.reset()
      const subjectId = row.subjectId || this.ids
      getSubject(subjectId).then(response => {
     /*    this.form = response.data */
        this.open = true
        this.title = '修改课程'
      })
    },
2. 导致原因
2.1 Vue 响应式原理

this.form = response.data无法做到页面数据响应,使用console.log(response.data) 发现后端传递给前端的response中没有data,控制台输出为 undefined

2.2 Controller层没有使用 AjaxResult 向前端传输数据(主要原因)

使用AjaxResult返回

    @PreAuthorize("@ss.hasPermi('system:school:query')")
    @GetMapping(value = "/{schoolId}")
    public AjaxResult getInfo(@PathVariable("schoolId") Long schoolId) {
        return success(schoolService.getById(schoolId));
    }

更改代码后没有使用AjaxResult返回

    @PreAuthorize("@ss.hasPermi('system:school:query')")
    @GetMapping(value = "/{schoolId}")
    public School getInfo(@PathVariable("schoolId") Long schoolId) {
        return schoolService.getById(schoolId);
    }
3. 解决方案
3.1 响应式处理

this.form = Object.assign({},this.form,this.form) 这样处理后表单中的全部控件均为响应式

深入Vue响应式原理, 解决Vue表单文本框/选择框无法输入问题_vue2项目中form表单内的输入框下拉框无法使用-CSDN博客

3.2 修改回调函数中的操作,将response赋值给 this.form

this.form = response.data更改为this.form = response

4. 总结
4.1 前端调试技巧

console.log() 可以在F12、开发者工具中的Console控制台中看到输出

4.2 发现异常的状况可以选择从最简单的地方开始查找,逐步打印然后找到数据传输中的问题
  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
若依是一套基于 Spring Boot 和 Vue.js 的开源管理系统快速开发框架。下面是使用若依框架开发管理后台的方法: **前端技术** 若依框架前端采用的是 Vue.js,使用了 Element UI 组件库和 Vue-Router 路由框架。在前端开发中,主要涉及到的技术包括: - Vue.js:Vue.js 是一个渐进式 JavaScript 框架,可以用于构建用户界面和单页应用程序(SPA)。 - Element UI:Element UI 是一套基于 Vue.js 的组件库,提供了丰富的 UI 组件和交互效果。 - Vue-Router:Vue-Router 是 Vue.js 官方的路由框架,用于管理单页应用的路由。 **后端技术** 若依框架后端采用的是 Spring Boot,使用了 MyBatis-Plus 增强版和 Shiro 安全框架。在后端开发中,主要涉及到的技术包括: - Spring Boot:Spring Boot 是一个基于 Spring 框架的快速开发框架,用于构建独立的、可执行的 Spring 应用程序。 - MyBatis-Plus:MyBatis-Plus 是 MyBatis 的增强版,提供了更加便捷的操作数据库的方式。 - Shiro:Shiro 是一个强大且易于使用的 Java 安全框架,提供了身份验证、授权、加密等功能。 **数据库增删改查** 若依框架使用的是 MyBatis-Plus 操作数据库,MyBatis-Plus 提供了丰富的 API,可以简化数据库的增删改查操作。以用户管理为例,以下是一个简单的操作示例: 1. 定义实体类 ```java @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) public class SysUser extends BaseEntity { private static final long serialVersionUID = 1L; /** * 用户ID */ @TableId(value = "user_id", type = IdType.AUTO) private Long userId; /** * 用户账号 */ @TableField(value = "user_name") private String userName; /** * 用户昵称 */ @TableField(value = "nick_name") private String nickName; /** * 用户邮箱 */ @TableField(value = "email") private String email; /** * 手机号码 */ @TableField(value = "phonenumber") private String phonenumber; /** * 用户性别(0男 1女 2未知) */ @TableField(value = "sex") private String sex; /** * 头像地址 */ @TableField(value = "avatar") private String avatar; /** * 密码 */ @TableField(value = "password") private String password; /** * 帐号状态(0正常 1停用) */ @TableField(value = "status") private String status; /** * 删除标志(0代表存在 2代表删除) */ @TableField(value = "del_flag") private String delFlag; /** * 最后登录IP */ @TableField(value = "login_ip") private String loginIp; /** * 最后登录时间 */ @TableField(value = "login_date") private Date loginDate; /** * 部门对象 */ @TableField(exist = false) private SysDept dept; /** * 角色对象 */ @TableField(exist = false) private List<SysRole> roles; /** * 角色组 */ @TableField(exist = false) private Long[] roleIds; } ``` 2. 定义 Mapper 接口 ```java public interface SysUserMapper extends BaseMapper<SysUser> { /** * 根据条件分页查询用户列表 * * @param page 分页对象 * @param user 用户信息 * @return 用户信息集合信息 */ List<SysUser> selectUserList(@Param("page") Page<SysUser> page, @Param("user") SysUser user); /** * 根据用户名查询用户 * * @param userName 用户名 * @return 用户对象信息 */ SysUser selectUserByUserName(String userName); /** * 根据用户ID查询用户所属角色组 * * @param userId 用户ID * @return 结果 */ List<Integer> selectUserRoleListByUserId(Long userId); } ``` 3. 在 Service 中调用 Mapper ```java @Service public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements ISysUserService { /** * 查询用户列表 * * @param user 用户信息 * @return 用户信息集合 */ @Override public List<SysUser> selectUserList(SysUser user) { return baseMapper.selectUserList(user); } /** * 根据用户名查询用户 * * @param userName 用户名 * @return 用户对象信息 */ @Override public SysUser selectUserByUserName(String userName) { return baseMapper.selectUserByUserName(userName); } /** * 根据用户ID查询用户所属角色组 * * @param userId 用户ID * @return 结果 */ @Override public List<Integer> selectUserRoleListByUserId(Long userId) { return baseMapper.selectUserRoleListByUserId(userId); } } ``` 4. 在 Controller 中调用 Service ```java @RestController @RequestMapping("/system/user") public class SysUserController extends BaseController { @Autowired private ISysUserService userService; /** * 查询用户列表 */ @PreAuthorize("@ss.hasPermi('system:user:list')") @GetMapping("/list") public TableDataInfo list(SysUser user) { startPage(); List<SysUser> list = userService.selectUserList(user); return getDataTable(list); } /** * 根据用户编号获取详细信息 */ @PreAuthorize("@ss.hasPermi('system:user:query')") @GetMapping(value = "/{userId}") public AjaxResult getInfo(@PathVariable Long userId) { return AjaxResult.success(userService.getById(userId)); } /** * 新增用户 */ @PreAuthorize("@ss.hasPermi('system:user:add')") @Log(title = "用户管理", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@Validated @RequestBody SysUser user) { user.setSalt(ShiroUtils.randomSalt()); user.setPassword(ShiroUtils.encryptPassword(user.getPassword(), user.getUserName(), user.getSalt())); return toAjax(userService.save(user)); } /** * 修改用户 */ @PreAuthorize("@ss.hasPermi('system:user:edit')") @Log(title = "用户管理", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@Validated @RequestBody SysUser user) { return toAjax(userService.updateById(user)); } /** * 删除用户 */ @PreAuthorize("@ss.hasPermi('system:user:remove')") @Log(title = "用户管理", businessType = BusinessType.DELETE) @DeleteMapping("/{userIds}") public AjaxResult remove(@PathVariable Long[] userIds) { return toAjax(userService.removeByIds(Arrays.asList(userIds))); } } ``` 以上是一个简单的操作示例,若依框架提供了更加便捷的操作数据库的方式,可以参考官方文档进行操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值