躺了很长时间,起来也不想学习。好久也咩更新了,开了音响,开干!
接上回jsp小项目,现在进程多是业务上的逻辑的设计。前端就是DOM元素的增加、修改,用一用模态框之类的。纯原生代码,注解还是热乎的(带着当时的感叹),没去总结。。
下面主要是我近期项目的前端做法,触发函数,函数包一个ajax然后返回的result再去解析。
解析变成前端的过程总结:
1.首先你得有一个基础位置,比如说在一个既定好的table里面加动态显示表格,你就得先id找到他(具体是什么什么选择器,(css选择器??)) 然后找到各种元素,比如说输入框,
这块输入框你可以之前写在既定位置,也可以后来再绑到表格上。。。说远了。说上前端了。。(随便粘点,体会一下)
$.ajax({
url:"${path}/back/admin/getModuleWithOne",
// json 数据从后端拿出来???
// 后端没取到这个id 没有通过this传过来 11.5 后来又尼玛传过来了 真是神奇
data:"id="+$(this).attr("id"),
type:"post",
dataType:"JSON",
success:function (result) {
buildModual(result);
}
});
// 模态框按钮触发
$('#bt1').click();
});
function buildModual(result){
var table=$("#table tbody");
table.empty();
var admin=result.admin;
var roles=result.roles;
var inputAdmin=$("#inputAdmin");
var inputaid=$("#inputaid1");
inputAdmin.val(admin.name);
inputaid.val(admin.id);
buildModule(result);
}
function buildModule(result){
var admin=result.admin;
var roles=result.roles;
var table=$("#table");
$.each(roles,function (index,role) {
if(admin.role.id==role.id){
var input=$("");
input.attr("value",role.id);
}else{
var input=$("");
input.attr("value",role.id);
}
var tr=$(" ");
var inputtd=$(" ");
刚看了一下,上篇文章是上个阶段的开发日志的梳理,并没有发现json、ajax的踪影,所以这篇文章来梳理下最近学到技术。。。
大概描述一下业务场景:
1.用户实现基本注册,基本信息填写完毕后,选择一个管理权限就好了。
2.然后注册完毕后,用户直接跳转到用户管理展示页面就好了。
用到技术:
整体:jsp的MVC框架
前端:表格提交(这块用的不是sublimet类型,就是一个按钮类型)按钮 绑定一个js函数,函数里写一个ajax请求。重点在 success这块:因为平时就是这么在前端Debug,所以先预留了一个弹窗(后面其实还有一个小bug在这里想说。。)
function add(){
$.ajax({
url:"${path}/back/admin/addadmin",
data:$("#form").serialize(),
type:"post",
dataType:"JSON",
success:function (result) {
// 后端验证结果
aletr(result.successed)
}
});
<form id="form">
.....
<span class="spmess"> <input type="button" value="确认" onclick="add()"></span>
</form>
后端部分–主要在控制层
dao层就不说了,dao层和service因为可以模块测试,我一般就自己写一个主函数先试一试
dao和service层经验分享
举个例子
public boolean addroleWithaid(int addid,int rid){
String sql1="INSERT INTO admin_role VALUES(?,?);";
try {
PreparedStatement preparedStatement=connection.prepareStatement(sql1);
preparedStatement.setInt(1,addid);
preparedStatement.setInt(2,rid);
preparedStatement.execute();
.....
}
public static void main(String[] args) {
// 11.9 测试
// roledao roledao=new roledao();
// roledao.addroleWithaid(16,4);
}
}
因为我知道业务逻辑里面要求转到新的页面,所以想都没想直接在后端加了一个重定向。
那么好戏开始!!
看这个代码,乍一看,一点毛病没有吧。json也封装好了,json封装好,这样ajax就有回传了吧。而且我这不也放在打印流里面了,,怎么前端迟迟不弹窗??
最早我想的是:是不是我有段时间没写重定向了,写错了??路径问题,打印看了下??没问题啊??
后来去找老师问下,我们解决的步骤基本是这样的:
**
我们都知道我们使用ajax主要解决异步加载问题,但是深入思考其实就是,我们还要这个页面留着看呢,但是我这个业务事注册提交之后事跳转到新的页面,所以完全没有必要,为了使用ajax使用啊!!!
**
3.最后,终于想明白了冲突问题(我归结为冲突问题–)
ajax的回传 我们用打印流回传,但其实还是绑定response(或者与response平级)(我猜的)给到前端。
然后底下你来个重定向(他确实是绑在response上吧),java一下子懵了,我TM到底去哪里???
String text="注册成功,马上跳转";
jsonObject.put("successed",text);
writer.print(jsonObject);
String urltest=request.getContextPath()+"/back/userManager.jsp";
System.out.println("1111:: "+urltest);
response.sendRedirect(urltest);
4.最后的解决方案,我当时忘了ajax自己就可以做重定向啊!!
加一句不就完了吗??但是不思考这个过程,就不会发现这快其实真没有必要加ajax吧。。。
success:function (result) {
console.log(result.successed)
window.location="userManager.jsp"
}
还是控制层出现的bug(说回来jsp写到这个时候,服务层和dao层真的不应该出bug了。)
当时就,我为了代码的简洁,就把json对象写在外面了。 基本上是下面这样,把service层、json对象、回传流都放在外面了,出现的现象也是死活不显示json。。。
后来大龙哥指导,把json都拿到if里面去,真就好了(不是不能这么用,但是有大概率会出问题)(我写前两个业务是没有问题的,后面到第三个出问题了。。)(暂时不清楚原因,大概理解成json一根管子你不要塞太多不同类型,不然到前端解析的时候,json看太复杂就罢工了)
// 过滤url 进行下一步选择功能模块
String url1=request.getRequestURI();
String url2=url1.substring(url1.lastIndexOf("/")+1,url1.length());
adminService adminService=new adminService();
roleService roleService=new roleService();
JSONObject jsonObject=new JSONObject();
PrintWriter writer=response.getWriter();
// 用户管理--整体展示
if ("getall".equals(url2)){
}
// json 11.5 json不同业务还不能放一个json 前端会不响应的
if("getModuleWithOne".equals(url2)){
}
// 添加用户
if("addadmin".equals(url2)){
}
}else{
// 不合法
// 11.9 等待 加入正则表达包
}
}
第三个问题 还是ajax问题
ajax问题的话,我遇到的问题大概现在有这么几种
1.第一种最基础的就是 jar包没打到服务器上,导致解析不出来 所以前端会显示根本不支持你这个方法。
2.第二种就是,后端代码有问题,导致的不回传,所以ajax会一直等待。。。。(包括你不把json放到ajax里面)
还有一种测试方法要分享,直接上url这种。现在我已经没法复现bug了。
隐约记得,前端控制台只是报错–内容只是服务器拒绝服务,这时候你可以这样,直接别用ajax去打这个url ,一步就去直接上ajax里面的url,我记得这种报错信息会很明显。
json后续还要多了解,但是本质上就是一种编码格式,一种集合而已。
好好好,边听歌边码字,让我有想写bug了,不说,打码!