• java接收前端easyui datagrid传递的数组参数


    这篇文章分享一下怎么在easyui的datagrid刷新表格时,在后端java代码中接收datagrid传递的数组参数。

    数组来源于技能的tagbox(标签框),tagbox和combobox的区别是tagbox可以选择多项。

    标签框渲染的代码为

    1. $("#skill_ids").tagbox({
    2. url: "/chongwu_skill_category/selectAll",
    3. valueField: "id",
    4. textField: "name",
    5. width: 300,
    6. hasDownArrow: true,
    7. groupField: "type",
    8. panelHeight: "auto",
    9. prompt: "--请选择技能--",
    10. groupFormatter: function(group){
    11. return "" + skillTypes[group] + "";
    12. },
    13. formatter: function(row) {
    14. return " " + row.name;
    15. }
    16. });

    然后页面上方的搜索按钮绑定刷新表格事件,会获取3个下拉框的值并传到后端。

    1. $("#search").linkbutton({
    2. iconCls: "icon-search"
    3. }).click(function() {
    4. let categoryId = $("#category_id").combobox("getValue");
    5. let roleId = $("#role_id").combobox("getValue");
    6. let skillIds = $("#skill_ids").tagbox("getValues");
    7. $("#chongwu_list").datagrid("load", {
    8. roleId: roleId,
    9. skillIds: skillIds,
    10. categoryId: categoryId
    11. });
    12. });

    但是传递参数的时候,发现参数的格式和我们想要的不太一样

    参数名居然带了一个数组的[],很显然这不是我们想要的结果。

    改进后的代码

    1. $("#search").linkbutton({
    2. iconCls: "icon-search"
    3. }).click(function() {
    4. let categoryId = $("#category_id").combobox("getValue");
    5. let roleId = $("#role_id").combobox("getValue");
    6. let skillIds = $("#skill_ids").tagbox("getValues");
    7. $("#chongwu_list").datagrid("load", {
    8. roleId: roleId,
    9. categoryId: categoryId,
    10. skillIds: JSON.stringify(skillIds)
    11. });
    12. });

    此时参数格式是正确的,把数组转成了json格式的字符串。

    然后在后端java通过List skillIds参数接收,点击搜索按钮居然报错了,不能把String转为List

    这时候就要借助spring的转换器来完成类型转换了,创建一个Converter的实现类,并声明为Spring组件。

    1. package cn.edu.sgu.www.mhxysy.converter;
    2. import com.alibaba.fastjson.JSON;
    3. import org.springframework.core.convert.converter.Converter;
    4. import org.springframework.stereotype.Component;
    5. import java.util.List;
    6. /**
    7. * String ==> List的转换器
    8. * @author heyunlin
    9. * @version 1.0
    10. */
    11. @Component
    12. public class StringToListOfIntegerConverter implements Converter> {
    13. @Override
    14. public List convert(String source) {
    15. return JSON.parseArray(source, Integer.class);
    16. }
    17. }

    重启项目,重新查询一次,这一次成功了,查询到符合条件的唯一一条数据。

    上面已经提供了完美的解决方案,当然,方案不唯一,可以把数组所有元素通过一个字符连接起来,然后在后端通过相同的字符分割,也能得到想要的数组。(博主一开始也是这么实现的)

  • 相关阅读:
    Android
    100天精通Oracle-实战系列(第21天)Oracle 数据泵常用参数和命令
    K210 调节颜色阈值识别红绿黄三色
    Stable-diffusion-webui
    码农人,码农魂,码农都是人上人【Java】值得收藏的【方法递归】经典题目 (1)
    手把手入门MO | 如何使用SeaTunnel将数据写入MatrixOne
    c++函数参数和返回值
    MATLAB算法实战应用案例精讲-【图像处理】SLAM技术详解(补充篇)
    数说故事以领先的大数据分析及服务实践,实力入围「Cloud 100 China 2022」首届榜单
    java-net-php-python-jsp汽车租赁管理系统计算机毕业设计程序
  • 原文地址:https://blog.csdn.net/heyl163_/article/details/134439038