人员管理系统遇到问题记录

问题一:

在操作的时候,vue前端页面突然空白,看控制台也没有报错,我这里遇到的问题是把子组件的名字写错了,在写代码的时候习惯ctrl+z进行撤回,速度过快不好把握自己的原始代码到低是什么样子的,后面也是通过vscode的日志功能查看之前的代码找到的错误。

 components里面的TreeSelect少写一个t,加上就可以

  import TreeSelect from '@riophae/vue-treeselect'

  import '@riophae/vue-treeselect/dist/vue-treeselect.css'

  export default {

  components: {TreeSelec},

问题二

我负责的需求是用户合同管理还有管理员合同管理功能,合同涉及到签约时间和到期时间,前端传过来的是一个字符串,后端需要一个data对象,因此需要进行string转换date。之前直接使用date类型接收params里面的数据,很显然报错了,类型转换错误,String不能直接转换为date。

String createDatetime = (String) params.get("createDatetime");
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date date = new Date();
         try {
            date = simpleDateFormat.parse(createDatetime);
        } catch (ParseException e) {
            e.printStackTrace();
        }

问题三

在进行到期合同提醒功能的实现时,我的思路是在前端设置一个定时器,隔一定的时间进行自动发送请求到控制器对数据库里面的到期时间进行判定,判定当前时间是否大于到期时间,通过毫秒值判定。当然在created钩子函数里面也设置方法的调用。

在编写的过程中我遇到了Handler dispatch failed; nested exception is java.lang.StackOverflowError这个错误,通常情况下是死循环或者循环依赖。我的问题是在编写判定时因为for循环里面的if条件出问题因此一直陷入循环,后面改正条件即解决。

问题四

在计算合同到期时间时,最开始是想用合同新增时选择到期时间,但后续的展示以及数据逻辑的编写有一定的问题,因此我决定使用前端发送请求时携带参数,参数代表合同 的年限,后端自动计算到期时间,并把合同年限保存在数据库,当修改时回调。

在这里我遇到了一个整数过大的问题,因为最开始用一年的毫秒值*合同年限加上签约时间的毫秒值就是到期时间,但是一年的毫秒值用int实在是太大,数据范围超出,因此决定使用使用Long类型也是一样,  Java在任何情况下,处理整数型的“字面量(数据)”时,默认会将字面量当做int型处理。因此需要在数据后加上L,表示是一个Long类型的数据。

问题五:错误java.lang.IllegalArgumentException: Invalid character found in the request target.

当在浏览器中访问时 URL中带有特殊字符,如花括号冒号时,就会出现这个错误。

我的错误原因是在这里拼接的时候出现失误,少写了一个引号导致出现特殊字符

this.$http.adornUrl(`/sys/contract/upload?`) +

      `token=${this.$cookie.get("token")}` +

      `&uid=` +

      file.uid +

      `&id=` +

      this.cid ;

总结一:

在写文件上传下载时运用到了一个新的知识,MultipartFile是org.springframework.web.mutipart包下的一个类

MultipartFile是一种可以接收使用多种请求方式来进行上传文件的代表形式。
这个文件的内容可以存储到内存中或者存储在磁盘的临时位置上。
用户可以自由的拷贝文件内容到session存储中,或者以一种永久的形式进行存储,如果有需要的话。
这种临时性的存储在请求结束之后将会被清除掉。

MultipartFile是一个接口,并继承自InputStreamScource,且在InputStreamScource接口中封装了getInputStream方法,该方法返回类型为InputStream类型,因此MultipartFile文件可以转换为输出流。

multipartFile。getInputStream();

方法说明
String getName()返回参数的名称
String getOriginalFilename()返回客户端文件系统中的原始文件名。
String getContentType()获取文件的类型。
boolean isEmpty()判断传入的文件是否为空,如果为空则表示没有传入任何文件。
long getSize()用来获取文件的大小,单位是字节。
byte[] getBytes()用来将文件转换成一种字节数组的方式进行传输,会抛出IOException异常。
InputStream getInputStream()返回一个InputStream以从中读取文件的内容
void transferTo(File dest)把接收到的文件写入到目的文件中,如果目的文件已经存在了则会先进行删除。用于将MultipartFile转换为File类型文件
void transferTo(Path dest)
将接收到的文件传输到给定的目标文件。默认实现只复制文件输入流。

总结二:在对合同时间的记录中我发现了一个组件

可以快捷的生成日期类型数据

 <el-date-picker
      v-model="value1"
      type="datetime"
      placeholder="选择日期时间">
    </el-date-picker>
参数说明类型可选值默认值
value / v-model绑定值date(DateTimePicker) / array(DateTimeRangePicker)
readonly完全只读booleanfalse
disabled禁用booleanfalse
editable文本框可输入booleantrue
clearable是否显示清除按钮booleantrue
size输入框尺寸stringlarge, small, mini
placeholder非范围选择时的占位内容string
start-placeholder范围选择时开始日期的占位内容string
end-placeholder范围选择时结束日期的占位内容string
time-arrow-control是否使用箭头进行时间选择booleanfalse
type显示类型stringyear/month/date/week/ datetime/datetimerange/daterangedate
format显示在输入框中的格式string日期格式yyyy-MM-dd HH:mm:ss
align对齐方式stringleft, center, rightleft
popper-classDateTimePicker 下拉框的类名string
picker-options当前时间日期选择器特有的选项参考下表object{}
range-separator选择范围时的分隔符string-'-'
default-value可选,选择器打开时默认显示的时间Date可被new Date()解析
default-time选中日期后的默认具体时刻非范围选择时:string / 范围选择时:string[]非范围选择时:形如12:00:00的字符串;范围选择时:数组,长度为 2,每项值为字符串,形如12:00:00,第一项指定开始日期的时刻,第二项指定结束日期的时刻。不指定会使用时刻 00:00:00
value-format可选,绑定值的格式。不指定则绑定值为 Date 对象string日期格式
name原生属性string
unlink-panels在范围选择器里取消两个日期面板之间的联动booleanfalse
prefix-icon自定义头部图标的类名stringel-icon-date
clear-icon自定义清空图标的类名stringel-icon-circle-close

总结三:还有文件上传组件

<el-upload
  class="upload-demo"
  action="https://jsonplaceholder.typicode.com/posts/"
  :on-preview="handlePreview"
  :on-remove="handleRemove"
  :before-remove="beforeRemove"
  multiple
  :limit="3"
  :on-exceed="handleExceed"
  :file-list="fileList">
  <el-button size="small" type="primary">点击上传</el-button>
  <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
</el-upload>
参数说明类型可选值默认值
action必选参数,上传的地址string
headers设置上传的请求头部object
multiple是否支持多选文件boolean
data上传时附带的额外参数object
name上传的文件字段名stringfile
with-credentials支持发送 cookie 凭证信息booleanfalse
show-file-list是否显示已上传文件列表booleantrue
drag是否启用拖拽上传booleanfalse
accept接受上传的文件类型(thumbnail-mode 模式下此参数无效)string
on-preview点击文件列表中已上传的文件时的钩子function(file)
on-remove文件列表移除文件时的钩子function(file, fileList)
on-success文件上传成功时的钩子function(response, file, fileList)
on-error文件上传失败时的钩子function(err, file, fileList)
on-progress文件上传时的钩子function(event, file, fileList)
on-change文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用function(file, fileList)
before-upload上传文件之前的钩子,参数为上传的文件,若返回 false 或者返回 Promise 且被 reject,则停止上传。function(file)
before-remove删除文件之前的钩子,参数为上传的文件和文件列表,若返回 false 或者返回 Promise 且被 reject,则停止删除。function(file, fileList)
list-type文件列表的类型stringtext/picture/picture-cardtext
auto-upload是否在选取文件后立即进行上传booleantrue
file-list上传的文件列表, 例如: [{name: 'food.jpg', url: 'https://xxx.cdn.com/xxx.jpg'}]array[]
http-request覆盖默认的上传行为,可以自定义上传的实现function
disabled是否禁用booleanfalse
limit最大允许上传个数number
on-exceed文件超出个数限制时的钩子function(files, fileList)-

对于手动上传我们还需要调用

<el-upload
  class="upload-demo"
  ref="upload"
  action="https://jsonplaceholder.typicode.com/posts/"
  :on-preview="handlePreview"
  :on-remove="handleRemove"
  :file-list="fileList"
  :auto-upload="false">
  <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
  <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上传到服务器</el-button>
  <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
</el-upload>
<script>
  export default {
    data() {
      return {
        fileList: [{name: 'food.jpeg', url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'}, {name: 'food2.jpeg', url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'}]
      };
    },
    methods: {
      submitUpload() {
        this.$refs.upload.submit();
      },
      handleRemove(file, fileList) {
        console.log(file, fileList);
      },
      handlePreview(file) {
        console.log(file);
      }
    }
  }
</script>

关键是这俩句

手动上传的方法 通过button绑定

   this.$refs.upload.submit();

关闭自动上传

 :auto-upload="false"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值