标题有点复杂,我不太会描述。小白的问题。我现在所做的功能是从一张表获取id,这个id是另一个表的外键,根据id查找内容,刷新再将内容通过ajax请求显示在主页面上,其实用单独的一条sql语句就可以实现,不过我使用了两次sql语句。
1. 数据库表
表一 :内容表 announcement
表二 :公告表 notice
此处的aid表示 表一的id,nid表示 此条内容显示在主页面的位置。
主页面有三个div,要分别的出现在三个div盒子里面,而不能重叠。
2. 主页面视图(我使用颜色占位,稍微有点丑,因为我需要看到div的位置)
3. 主页面html代码
5. 后台部分ajax请求
此处我使用了一个layer插件,这样会有一个弹出窗口,alter也可以的。
function UPTONOTICE() {
var selectid = $("#selectid").val();
var id = $("#id").val();
alert(id);
$.ajax({
type : "POST",
url : "${cx}/public/announcement/upToNotice",
data : { "id" : id ,"selectid":selectid},
cache: false,
success : function(result) {
if ( result.success ) {
layer.msg("公告信息发布成功", {time:2000, icon:6, shift:6}, function(){
window.location.href = "${cx}/public/announcement";
});
} else {
layer.msg("公告信息发布失败", {time:2000, icon:5, shift:6}, function(){
});
}
}
})
}
此处就不用贴后台处理类,就是根据这些信息把a表的 id取出来,存在n表的aid里面,之所以贴出来是因为此处是选择了这个信息具体要更新到页面的哪一个位置(公告位置)。
6. 主界面ajax请求
参考3主界面代码
var noticeid1 = $("#notice1");
var noticeid2 = $("#notice2");
var noticeid3 = $("#notice3");
var notice = $("#notice");
$.ajax({
async: false,
method:"GET",
url: "${cx}/getNoticeinfo", //数据URL路径
contentType: "application/json",
success: function (data) { //成功后的方法
if (data==null||data==""){
var ico=" \n";
notice.append(ico+"当前没有公告
")
}else{
alert("公告长度"+data.length);
for(var i =0 ;i<3;i++){
var content =data[i].content;
var time = data[i].time;
var noticecontent = ""+content+"发布日期:"+time+"
";
//因为我是按照正序反回信息的,只有三条信息
if (i==0){
noticeid1.append(noticecontent);
}
else if(i==1){
noticeid2.append(noticecontent);
}else{
noticeid3.append(noticecontent);
}
}
}
},
error: function () { // ajax请求失败
alert("公告请求失败!");
}
});
}
7.controller类处理请求
刷新主页面,ajax请求获取notice表中aid,和nid,再根据aid和announcement表中的id进行对比,查找正确的内容content再显示在主界面上。
Announcement、notice都是有实体类的。用list存储可以获取整条信息。
//TODO 加载公告信息 getNoticeinfo
@ResponseBody
@RequestMapping(value = {"/getNoticeinfo"},method = RequestMethod.GET)
public List getNoticeinfo(){
//获取notice所有信息,一定只有三条,因为div就三个位置
//根据notice表里面的aid 获取announcement表的id ,得到了id就知道了content内容
List notices=publicService.GetNotice();
if(notices.isEmpty()){
System.out.println("当前没有公告");
return null;
}
List announcements= new ArrayList<>();
int aid=0;
for(Notice notice :notices){
//得到aid
aid=notice.getAid();
//这里不能用announcements=publicService.GetNoticeByAid(aid);
//因为这样永远只能存储最后一条信息,所以我更改了这里,单独写了一个方法。每次调用存进去!!!!
announcements.add(GetNotice(aid));
}
System.out.println("announcements"+announcements);
return announcements;
}
自定义方法:
private Announcement GetNotice(int aid){
return publicService.GetNoticeByAid(aid);
}
7. Mybatis Service类和Dao类处理方法
GetNotice()
public List GetNotice() {
return publicDao.GetNotice();
}
@Select("select * from notice order by nid")
List GetNotice();
GetNoticeByAid(aid)
//根据nid 从announcement中找到相关的公告内容
public Announcement GetNoticeByAid(int aid) {
return publicDao.GetNoticeByAid(aid);
}
@Select("select * from announcement where id = #{aid}")
Announcement GetNoticeByAid(int aid);
小白希望得到大家的建议,谢谢。