<c:forEach />方法嵌套問題
最近遇到需要<c:forEach />進(jìn)行嵌套調(diào)出數(shù)據(jù)册着,但是如果在里層用外層數(shù)組的屬性會出現(xiàn)問題兢交,例如
lists是List<String>類型的摩疑, 我在外層循環(huán)時可以獲得String的對象匕累,但是如果里層循環(huán)如果想要獲取這個String對象所對應(yīng)的后臺數(shù)據(jù)卻不能直接用EL表達(dá)式的${String},因?yàn)檫@樣獲取到的還是個String類型渡八,而且也無法嵌套使用${${}}的方式央星,那么要怎么處理呢霞怀,我在修改了很多次后臺的數(shù)據(jù)存放集合類型,終于確認(rèn)了一個集合---hashmap,原因在此莉给,我可以調(diào)用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數(shù)據(jù)傳輸?shù)角岸说膯栴}
昨天遇到個問題就是徐矩,前端通過ajax把json數(shù)據(jù)傳輸?shù)胶笈_,后臺接收到數(shù)據(jù)叁幢,有兩部分?jǐn)?shù)據(jù)需要發(fā)送滤灯,這時候就遇到個問題,如果去發(fā)送這兩部分不同類型的數(shù)據(jù)曼玩,我起初將第一部分?jǐn)?shù)據(jù)使用model.addAttribut()的方式進(jìn)行添加鳞骤,然后第二部分?jǐn)?shù)據(jù)正常使用response將json寫前端,這個時候出現(xiàn)問題了黍判,第一部分使用model添加的數(shù)據(jù)在前端收不到弟孟。
這種情況其實(shí)很正常,之前能夠通過model進(jìn)行傳輸样悟,是因?yàn)榉椒ǖ淖詈蠓祷亓隧撁娴刂贩髂迹诜祷仨撁娴刂返臅r候會對model中存儲的數(shù)據(jù)使用request.addAttribute()發(fā)送到前端庭猩,而在上面的情況中,我的數(shù)據(jù)流是沒有經(jīng)過這個流程的陈症,而是以response的方式直接寫到前端蔼水,那么就需要將這個model包裝到response中,后來我想了一個辦法录肯,既然是兩部分?jǐn)?shù)據(jù)趴腋,雖然數(shù)據(jù)格式不同,但是我還是可以利用hashmap的方式论咏,賦予第一部分和第二部分不同的key优炬,在前端就可以直接通過key來獲取兩部分。
hashmap傳輸?shù)角岸说墨@取方法跟list有點(diǎn)不同
看例子:
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有些列的輸出結(jié)果為null
當(dāng)我們進(jìn)行多表聯(lián)合查詢的時候,就不能簡單的使用resultType來設(shè)置返回值類型养涮,而需要設(shè)置resultMap的方式葵硕,基于此,我在輸出有些列的時候出現(xiàn)空值贯吓,但是將sql語句在dos下執(zhí)行懈凹,又能夠正常執(zhí)行,那么顯然問題出現(xiàn)在賦值的時候悄谐,我查詢到數(shù)據(jù)沒有賦值給我創(chuàng)建的變量介评,舉個例子:
--用戶表
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 "地址",
)
在數(shù)據(jù)庫中創(chuàng)建這兩個表,然后在java代碼中需要創(chuàng)建這兩個表相關(guān)的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文件中,多表聯(lián)合查詢的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
在這之前的操作都是對的洼专,下面是關(guān)于resultMap方面的設(shè)置
<resultMap id="adminResultMap" type="admin">
<id property="id" column="id" />
...
</resultMap>
如果我這樣寫,那么id的值絕對是為空孵构,為什么呢屁商,注意下我們前邊sql語句的設(shè)置,我們設(shè)置了別名颈墅,也就是我們把a(bǔ)dmin.id設(shè)置為了adminId,也就是說蜡镶,我們只有按照下邊這樣的設(shè)置才不會有問題
<resultMap id="adminResultMap" type="admin">
<id property="id" column="adminId" />
...
</resultMap>
歸根究底,原因在于我們SQL得到的列與我們的POJO不匹配的問題恤筛,特別是設(shè)置了autoMapping這個屬性官还,進(jìn)行自動匹配,如果你設(shè)置了別名毒坛,那么就很可能出錯望伦,最保守的做法就是每個屬性與列進(jìn)行一一對應(yīng)林说,這樣就不會出錯,但是工作量比較大
2018-10-15
js實(shí)現(xiàn)頁面刷新計(jì)數(shù)
今天遇到一個問題屯伞,我使用遮罩的方式腿箩,簡單的進(jìn)行一個表數(shù)據(jù)的增刪改,但是在修改完表后劣摇,我希望馬上顯示出結(jié)果珠移,但是因?yàn)槲也皇鞘褂胊jax的方式來添加數(shù)據(jù)的,那么如果刷新頁面末融,將會回到初始的狀態(tài)钧惧,也就是我的首頁,這樣我還需要重新點(diǎn)進(jìn)這個頁面才能看到這個數(shù)據(jù)勾习,這樣很不方便浓瞪,所以我就在想,能不能計(jì)算頁面刷新來實(shí)現(xiàn)语卤,加載頁面后直接進(jìn)入這個頁面追逮,測試后的結(jié)果是失敗的,失敗的原因有兩方面粹舵,一方面钮孵,雖然我刷新頁面后直接跳轉(zhuǎn)到這個頁面,但是還是有個轉(zhuǎn)場的過程眼滤,這樣就導(dǎo)致體驗(yàn)感不好巴席;另一方面,我不止這個頁面有刷新頁面的指令诅需,那么就會造成漾唉,我刷新界面后,以后只會跳轉(zhuǎn)這個界面的BUG堰塌,基于這兩個方面赵刑,頁面刷新計(jì)數(shù)的方法宣告失敗,但是也有可以借鑒的地方场刑,可以計(jì)算網(wǎng)站的訪問量哈般此,好,下面介紹下頁面刷新計(jì)數(shù)的方法:
window.onload = function(){
if(window.name==""){
window.name = "0";
}else{
window.name = eval(window.name)+1;
}
}
window的name給我們提供了計(jì)數(shù)方法的實(shí)現(xiàn)
原本name的作用是:可設(shè)置或返回存放窗口的名稱的一個字符串牵现。
參考鏈接:http://www.reibang.com/p/ae69ff3d54ea
最后我是怎么實(shí)現(xiàn)這個功能的铐懊,有點(diǎn)取巧了,我在h5中數(shù)據(jù)的最后加了一個標(biāo)識的標(biāo)簽<div />瞎疼,這個標(biāo)簽可以得到數(shù)據(jù)的最后一行科乎,然后我根據(jù)按鈕點(diǎn)擊添加,每次都會在這個標(biāo)簽后使用append()方法追加新的文本贼急,也就是說茅茂,網(wǎng)頁本身沒有刷新捏萍,我是靠局部追加數(shù)據(jù)來實(shí)現(xiàn)的。
使用ajax獲取不到外層對象的問題
通過F12調(diào)試可以發(fā)現(xiàn)玉吁,在ajax里使用$(this)是獲取不到外層的對象的照弥,應(yīng)該說這個時候的this其實(shí)指代的是ajax本身,所以我在外層定義一個var變量來保存這個標(biāo)簽的對象进副,在ajax中還是無法獲取到這個對象这揣,怎么回事呢?
我打開這個var變量看了下影斑,他的父類给赞,父類的父類,一層層的往上會將這些標(biāo)簽全部存儲到一個數(shù)組中矫户,也就是我通過$(this).parents()的方式獲取到的不止一個標(biāo)簽了片迅,而是一個標(biāo)簽數(shù)組,那么根據(jù)你需要標(biāo)簽的位置皆辽,取下標(biāo)索引就可以拿到你要的標(biāo)簽柑蛇,我也這么做了,可結(jié)果還是出了問題驱闷,這讓我很困惑耻台,于是我對比一下平時我們${對象}和我通過var變量保存的有什么區(qū)別,可別說空另,還真有區(qū)別盆耽,通過var變量保存的只是標(biāo)簽,而不是標(biāo)簽對象扼菠,需要通過${變量}的方式來獲取對象摄杂,這樣對比,是不是說明這個變量等于"#id"或者".class"呢循榆,也就是說析恢,${}里頭其實(shí)也就是標(biāo)簽,我們只有通過${}才能拿到標(biāo)簽的對象秧饮∮彻遥看下我代碼的實(shí)現(xiàn):
$(".deleteAdmin").live("click",function(){
var params = {};
params.userName = $(this).parents().parents().find(".userName").html();
var target = $(this).parents().parents()[0];//第一部分,將標(biāo)簽存入變量中
$.ajax({
url:"deleteAdmin",
type:"get",
data:params,
dataType:"json",
success:function(){
$(target).css("display","none");//取出標(biāo)簽并且獲取到對象進(jìn)行后續(xù)操作
},
error:function(){
alert("error");
}
});
});