问题总结

<c:forEach />方法嵌套问题

最近遇到需要<c:forEach />进行嵌套调出数据,但是如果在里层用外层数组的属性会出现问题,例如
lists是List<String>类型的, 我在外层循环时可以获得String的对象,但是如果里层循环如果想要获取这个String对象所对应的后台数据却不能直接用EL表达式的${String},因为这样获取到的还是个String类型,而且也无法嵌套使用${${}}的方式,那么要怎么处理呢,我在修改了很多次后台的数据存放集合类型,终于确认了一个集合---hashmap,原因在此,我可以调用hashmap.value来获取到我想要的对象,而不是直接用${}来获取hashmap.value对象,这样就可以避免嵌套的问题。
例如:

    <c:forEach items="${sale2Maps}" var="map" varStatus="index">
        <li>
            <a href="#" style="font-size: 13px;">${map.key}</a>
            <ul style="display: none;margin-left: 10px" class="closed">
                <c:forEach var="headman" items="${map.value}">
                    <a href="#" style="font-size: 10px;" class="sale_headman">${headman.ename}</a>
                </c:forEach>    
            </ul>
        </li>
    </c:forEach>

json数据传输到前端的问题

昨天遇到个问题就是,前端通过ajax把json数据传输到后台,后台接收到数据,有两部分数据需要发送,这时候就遇到个问题,如果去发送这两部分不同类型的数据,我起初将第一部分数据使用model.addAttribut()的方式进行添加,然后第二部分数据正常使用response将json写前端,这个时候出现问题了,第一部分使用model添加的数据在前端收不到。
这种情况其实很正常,之前能够通过model进行传输,是因为方法的最后返回了页面地址,而在返回页面地址的时候会对model中存储的数据使用request.addAttribute()发送到前端,而在上面的情况中,我的数据流是没有经过这个流程的,而是以response的方式直接写到前端,那么就需要将这个model包装到response中,后来我想了一个办法,既然是两部分数据,虽然数据格式不同,但是我还是可以利用hashmap的方式,赋予第一部分和第二部分不同的key,在前端就可以直接通过key来获取两部分。
hashmap传输到前端的获取方法跟list有点不同
看例子:

    uccess:function(data){
       var str = "";

       for(var a in data){
           str+="<div style='width: 200px;height: auto;min-height: 200px;border:1px solid #999;margin-left:"+
               "40px;margin-top: 40px;float: left;' title='"+params.department+"'><div class='sale_head' "+
               "style='border-bottom: 1px dashed"+
               "#999;'><img src='images/sale.png' style='height: 50px;width: auto;'><span style='font-size:15px;"+
               "margin-left: 30px' class='pic'>"+a+"</span></div><div class='sale_man' style='margin-top: 20px'>";
                for(var j = 0;j<data[a].length;j++){
                    str+="<span style='margin-left: 5px;margin-top: 10px;font-size: 13px' class='pic'>"+data[a][j].ename+"</span>";
                }
                tr+="</div></div>";
            }
         $("#mws-container").html(str);
    },

这要是两部分
第一部分,for(var a in data)
这里的a就直接是key了,可以直接使用

第二部分是获取key中的value
可以通过data[value]的方式获取value


mybatis中resultMap有些列的输出结果为null

当我们进行多表联合查询的时候,就不能简单的使用resultType来设置返回值类型,而需要设置resultMap的方式,基于此,我在输出有些列的时候出现空值,但是将sql语句在dos下执行,又能够正常执行,那么显然问题出现在赋值的时候,我查询到数据没有赋值给我创建的变量,举个例子:
--用户表
create table admin(
id int primary key auto_increment,
name varchar(20) comment "用户名",
age int comment "年龄",
other_id int
)

--用户其他信息表
create table admin_other(
id int,
address varchar(50) comment "地址",
)
在数据库中创建这两个表,然后在java代码中需要创建这两个表相关的POJO,这个时候要注意,我希望的是admin中嵌套admin_other,那么我就需要在admin中提供admin_other的对象,以及它的get与set方法

public class admin{
    private int id;
    private String name;
    private int age;
    private int otherId;
    private AdminOther other;

//getter and setter
...
}

然后在xml文件中,多表联合查询的sql语句可以如下:

    select 
        a.id as adminId,
        a.name as adminName,
        a.age as adminAge,
        b.id as otherId,
        b.address as otherAddress
    from admin a left outer join admin_other b
    on a.other_id = b.id

在这之前的操作都是对的,下面是关于resultMap方面的设置

    <resultMap id="adminResultMap" type="admin">
        <id property="id" column="id" />
        ...
    </resultMap>

如果我这样写,那么id的值绝对是为空,为什么呢,注意下我们前边sql语句的设置,我们设置了别名,也就是我们把admin.id设置为了adminId,也就是说,我们只有按照下边这样的设置才不会有问题

    <resultMap id="adminResultMap" type="admin">
        <id property="id" column="adminId" />
        ...
    </resultMap>

归根究底,原因在于我们SQL得到的列与我们的POJO不匹配的问题,特别是设置了autoMapping这个属性,进行自动匹配,如果你设置了别名,那么就很可能出错,最保守的做法就是每个属性与列进行一一对应,这样就不会出错,但是工作量比较大


2018-10-15

js实现页面刷新计数

今天遇到一个问题,我使用遮罩的方式,简单的进行一个表数据的增删改,但是在修改完表后,我希望马上显示出结果,但是因为我不是使用ajax的方式来添加数据的,那么如果刷新页面,将会回到初始的状态,也就是我的首页,这样我还需要重新点进这个页面才能看到这个数据,这样很不方便,所以我就在想,能不能计算页面刷新来实现,加载页面后直接进入这个页面,测试后的结果是失败的,失败的原因有两方面,一方面,虽然我刷新页面后直接跳转到这个页面,但是还是有个转场的过程,这样就导致体验感不好;另一方面,我不止这个页面有刷新页面的指令,那么就会造成,我刷新界面后,以后只会跳转这个界面的BUG,基于这两个方面,页面刷新计数的方法宣告失败,但是也有可以借鉴的地方,可以计算网站的访问量哈,好,下面介绍下页面刷新计数的方法:

window.onload = function(){
  if(window.name==""){
    window.name = "0";
  }else{
    window.name = eval(window.name)+1;
  }
}

window的name给我们提供了计数方法的实现
原本name的作用是:可设置或返回存放窗口的名称的一个字符串。
参考链接:https://www.jianshu.com/p/ae69ff3d54ea

最后我是怎么实现这个功能的,有点取巧了,我在h5中数据的最后加了一个标识的标签<div />,这个标签可以得到数据的最后一行,然后我根据按钮点击添加,每次都会在这个标签后使用append()方法追加新的文本,也就是说,网页本身没有刷新,我是靠局部追加数据来实现的。

使用ajax获取不到外层对象的问题

通过F12调试可以发现,在ajax里使用$(this)是获取不到外层的对象的,应该说这个时候的this其实指代的是ajax本身,所以我在外层定义一个var变量来保存这个标签的对象,在ajax中还是无法获取到这个对象,怎么回事呢?
我打开这个var变量看了下,他的父类,父类的父类,一层层的往上会将这些标签全部存储到一个数组中,也就是我通过$(this).parents()的方式获取到的不止一个标签了,而是一个标签数组,那么根据你需要标签的位置,取下标索引就可以拿到你要的标签,我也这么做了,可结果还是出了问题,这让我很困惑,于是我对比一下平时我们${对象}和我通过var变量保存的有什么区别,可别说,还真有区别,通过var变量保存的只是标签,而不是标签对象,需要通过${变量}的方式来获取对象,这样对比,是不是说明这个变量等于"#id"或者".class"呢,也就是说,${}里头其实也就是标签,我们只有通过${}才能拿到标签的对象。看下我代码的实现:

    $(".deleteAdmin").live("click",function(){
        var params = {};
        params.userName = $(this).parents().parents().find(".userName").html();
        var target = $(this).parents().parents()[0];//第一部分,将标签存入变量中
        $.ajax({
            url:"deleteAdmin",
            type:"get",
            data:params,
            dataType:"json",
            success:function(){
                $(target).css("display","none");//取出标签并且获取到对象进行后续操作
            },
            error:function(){
                alert("error");
            }
        });
    });
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • 1.Typescript中的&理解 参数中的 & 表示props对象同时拥有了TagManagementState...
    Lethe35阅读 7,596评论 0 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,384评论 25 707
  • You,re the king 你就是国王(记忆源于图片,king通过发音记忆单词,k+ing) My duty ...
    未来7年沙姐姐阅读 384评论 0 0
  • 活在一个小小的猎场,周围的圈子好像就这么大,最后连空气也觉得压抑。想要不断爬上新的山脉,不断看到更广阔的夜空。 厌...
    RainT阅读 176评论 0 1
  • 我跟老安认识二十多年了,光着腚的时候就一起玩了。 上大学后就没怎么见过,毕业之后来到南京,初来乍到,老安却已经...
    红桃k酒主阅读 529评论 0 0