这次采用struts2来实现一个简易的网上订餐系统,初步接触jquery和ajax技术,把作为初学者遇到的问题总结如下:
1、<tr>标签里的onclick比子标签<td>里面的onclick执行的晚。对于以下功能(如图),要判断点击了哪一行,本来加了表单的隐藏域,tr的onclick触发,给该隐藏域设置value的值,然后<td>的onclick里面通过ajax进行具体操作,提交给后台。但是由于上述执行顺序,导致第一次value为空,第二次value为上一次的值,不可取。所以取消该隐藏域,在<td>的onclick函数里传参数进去,直接设置即可。
2、为了在前台显示“已通过”的状态,采用ajax在回调函数中写,给显示的<td>标签用<span>的id来方便jquery来查找该标签,主要代码如下:
前台:
<td width="81" scope="col"><span id="state<%=rests.get(i).getRid()%>">
<%=rests.get(i).getState() %></span></td>
JS:
function passRest(id)
{
$.post("managerAction!passRest",{
restID: id
},function(result){
$("#state"+id).html("已通过");
});
}
3、关于JSON的使用参考http://hybxiaodao.iteye.com/blog/1107651。本来json-lib还依赖于其他的包开始没有导入所以一直出错,还不如自己构造JSON字符串来的简单~但不知道为什么post提交返回类型是json的话回调函数不执行,返回类型不写自己转换就可以了。转换方式很简单,如下:
$.post("managerAction!getInfo",{
restID : popid
},function callback(json){
var dataObj=eval("("+json+")");
alert(dataObj.img);
});
4、关于struts2的上传遇到的问题有两个,一个是File导入的包是import java.io.File,不是struts里面的,否则FileInputStream的参数只能传String。还有拦截器要先引用默认的拦截器,这点 需要注意。
5、struts2标签有默认的布局,会换行,放在表格里按照表格的布局会乱套,可以屏蔽掉默认的换行,参 考http://blog.sina.com.cn/s/blog_53a99cf30100eft1.html
6、在action中写JS输出提示信息,注意之后用重定向无法跳转,直接在JS中使用location即可,主要代码如下:
out.println("<script type=\"text/javascript\" language=\"javascript\">");
out.println("alert(\"操作成功!\");location=\"Rest/Rest.jsp\";");
out.println("</script>");
out.close();
7、AJAX的中文乱码问题http://zxc.zn2006.blog.163.com/blog/static/23298584201136105723850/,回调显示时也要注意response要设置编码UTF-8,并且界面也是UTF-8。然后JS文件也要设置为UTF-8否则alert等中文也是乱码。