不积跬步 无以至千里。
a
————————————————————————————————————————————————————————
tip 22:
重点!!
重点!!
mybatis #{} ${}区别 其中两点:
#{}解析传过来参数带单引号。
#{} 解析的是占位符?可以防止SQL注入, 比如打印出来的语句 select * from table where id=?
${}解析穿过来的参数值不带单引号
${} 不能防止SQL注入打印出来的语句 select * from table where id=2
tip 21:
模糊查询:
select * from a where name like '%name%'
在mapper中如下:select * from a where name like "%"#{keyword}"%"
tip 20:
$.ajax({
type: "POST",
url: "some.php",
data: "name=John&location=Boston", //第一种方式传参
// data: {name:"John",location:"Boston"} //第二种方式传参
// data: {foo:["bar1", "bar2"]} 转换为 '&foo=bar1&foo=bar2'
/*
第一种我们用url传参,参数里面如果加带"&"这个符号的话,可能参数接收不到或不完整,
如“ data: "name=John&location=Boston",” 如果name的值是"john&smith"这样写可能就会有问题,
我们可以用JS里面的encodeURIComponent()方法进行转义,
但如果用data: {name:"John",location:"Boston"}这种方式写的话就不需要进行转义,
如果转义的话,接收的将是转义后的字符串
*/
success: function(msg){
alert( "Data Saved: " + msg );
}
});
tip 19:
超级重要!使用ajax 其中data参数过多,可通过对form等元素序列化的方式传递参数
超级重要!form中name为tag_name的元素有多个,而通过”tag_name="+$('#tag_name') 没有取到值(会不会是因为form中设置的元素 name="tag_name" 而不是id="tag_name" 而#只取id的值??)
$.ajax({
cache: true,
type: "POST",
url:ajaxCallUrl,
data:$('#your form id').serialize(),// 你的formid
async: false,
error: function(request) {
alert("Connection error");
},
success: function(data) {
$("#commonLayout_appcreshi").parent().html(data);
}
});
$.ajax({
cache: true,
type: "POST",
url:ajaxCallUrl,
data:$('#your form id').serialize(),// 你的formid
async: false,
error: function(request) {
alert("Connection error");
},
success: function(data) {
$("#commonLayout_appcreshi").parent().html(data);
}
});
tip 18:
背景描述:
项目报错:java.io.FileNotFound Exception:http://www.xxxx.1.0.2.dtd
是因为opensysmphony停运 引用地址改为 http:struts.apache.org/dtds/xxxx
项目报错:java.io.FileNotFound Exception:http://www.xxxx.1.0.2.dtd
是因为opensysmphony停运 引用地址改为 http:struts.apache.org/dtds/xxxx
tip 17:
重点1(同类中,jsp传入到A中的参数此时A调用B方法,B仍可接收此参数,参数范围导致。)重点1。
重点2(return “重定向name” 在类的外部声明@org.apache.struts2.convention.annotation.Result(name="重定向name",location="xxxx.xxaction?a=${data.a}&b=${data.b}",type="redirectParams"),)重点2。
利用此点可以重新定向,新的请求,并且设置了请求内接收的参数。不过利用重点1的方法直接调用查询方法也能接收到参数。
修改查询结果中的数据后又执行了查询操作,此时searchForm中的开停车参数没有传入。
在updateForm中插入input hidden id="is_valid" (此方法在翻页等丢失参数的问题解决中常见)。当表格提交后参数也会提交
修改查询结果中的数据后又执行了查询操作,此时searchForm中的开停车参数没有传入。
在updateForm中插入input hidden id="is_valid" (此方法在翻页等丢失参数的问题解决中常见)。当表格提交后参数也会提交
————————————————————————————————————————————————————————
tip 16:微信公众号,在多种事件下会发送xml消息,其中FromUserName就是用户的openid,遂通过此方法获取用户openid。同时配置到开发者中心中的服务器地址。此地址是用于接收多种事件下微信发送的xml信息。在此地址的方法中将xml中的openid获取并存储到session中,就可以在后续操作中使用了。举例:假如单击了菜单,触发了事件,通过此法获取了用户openid,进入url,此url用户可以提交申请,并将此申请保存到数据库中,同时保存openid,就可以将用户与其操作信息绑定。
————————————————————————————————————————————————————————
tip 15:html内使用(服务器按钮)<button></button> 单击button后会刷新页面。使用<input type="button"></input>则不会刷新页面
——————————————————————————————————倒序分割——————————————————
tip 1:
背景描述:在textfiled1输入值,鼠标挪到textfiled2时,1失去焦点,触发事件。(输入值、改变值后,查询的是上一值。)
因为在当前窗口内项目的逻辑是参数需要单击保存按钮后才会保存到数据库中,所以输入后,数据库并没有更新。当前值由于没来得及保存就失去焦点(onblur)跳转窗口了,所以导致没有参数或者参数是上一轮的。
tip 2:
背景描述:在配置数据库映射文件(xml)时,出现错误:Attribute ResultType must be declared for element type"update"
xml配置sql映射文件时,只有有返回结果的如select,才需要配置resulttype。如果没有结果而配置了resulttype,就会报错。怀疑报错有问题,应该是not be declared。
tip 3:
??利用ajax传输数据后,刷新当前页,或刷新某一行内容。 要先刷新再submit。??
tip 4:
同一表中数据A变化后如何被数据B获取?
可用document.getElementById()得到Page内的内容,但此时因为没有submit所以还不是Request范围内的数据。当时Request范围内的数据时可以使用" data.数据id "获取。因为data有一个getdata方法。是request范围内的。
tip 5:
现在还有点混乱:
$('#xx') 、 #{xx} ?、 value="${data.xx}" ?、 document.getElementById() 四个在项目中常见的获取参数的方法。
var XX =document.getElementById("XX");如此获取的XX是一个dom类型的对象,但是我们可以用$(XX)将其转换为jquery对象,那转换后的jquery对象和直接通过$("#XX")获取的对象有什么区别呢? 答案是一样一样的!
tip 6:
背景描述:File file=new File("/temp/a.txt") 报错
使用 File file=new File("/a.txt") 或者File file=new File("D:/tmp/a.txt") 编译正常。 因为D指定了具体位置,而/a.txt 是写在默认盘符。而系统是不允许随意在深级目录建立文件的,为了保护磁盘。
tip 7:
在公司项目框架内,调用到Activity,在其内部建立xx参数,需要private xx声明,然后需要建立set get方法修改与获取,缺少set get会报错。错了一次就不要错了!切记!
0806更新:action.java类中声明了private对象。而当方法处理完返回到jsp界面后,通过${}调用到了action类中的私有变量,必须在action类中声明set get方法才可以在外部取值。
提交值通过submit,提交到后台。
而ajax是通过data传递参数,后台取值是通过在方法结尾处调用Struts2Util.getResponse().getWriter.print(JSONArray);将方法得到的结果写入到reponse范围内。然后ajax调用其!
tip 8:
背景描述:在jsp中声明了A、B两个弹窗。A中触发onclik事件弹出B弹框,但是B弹框被A覆盖。
解决办法:调整A、B弹框的声明顺序,解决。原来是先声明的子弹框后声明的父弹框。或者修改弹框位置。解决办法很多。
模式弹框/非模式弹框
模式:始终保持焦点,除非关闭,否则无法切换。
非模式:始终显示在最前端,但不会始终保持焦点。
tip 9:
错了一次不可再错:jsp中加入了一个分页文件,没有import相应方法。导致运行时格式错误。
tip 10:
背景描述:设置好分页后,点击下一页,所有参数清空(查询条件消失,变为无条件结果)。
因为项目分为两个表格,A form为查询条件form ,点击查询参数传输。B form没有A form中的参数。
解决办法:在B form中 加入<input type="hidden" id="A form中查询条件对应的id" value="${data.id}" >,当提交B form时把查询条件也提交。
tip 11:
用Eclipse管理多个项目。表现:多个eclipse快捷方式,不同文件名对应不同项目
实现:用一个eclipse管理多个项目
http://dongwei.iteye.com/blog/640369 桌面上几个eclipse图标,打开后会分别指向不同工作空间
E:\eclipse-jee-galileo-win32\eclipse\eclipse.exe -data workspace_aaa
空格+-date+工作空间位置
E:\eclipse-jee-galileo-win32\eclipse\eclipse.exe -data workspace_aaa
空格+-date+工作空间位置
tip 12:
查看方法被谁调用——改变方法名,看项目中哪个文件出错! 便于了解项目结构
tip 13:
项目配置服务器时报错:The server does not support version 3.0 of the J2EE Web module specification.
因为Tomcat6.0最多支持Servlet2.5 不支持3.0的(new or Import的项目Servlet选择的是3.0)。
操作:进入项目工作空间,进入项目根目录下.settings文件夹下org.eclipse.wst.common.project.facet.core.xml文件 内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<fixed facet="java"/>
<fixed facet="jst.web"/>
<fixed facet="wst.jsdt.web"/>
<installed facet="java" version="1.6"/>
<installed facet="jst.web" version="3.0"/>
<installed facet="wst.jsdt.web" version="1.0"/>
</faceted-project>
把
<installed facet="jst.web" version="3.0"/>
中的3.0修改为2.5即可
tip 14:
背景描述1:新建项目没有自动生成web.xml文件。
解决办法1:新建项目时不要直接finish!next后有一步需要自己选 generate web.xml。
背景描述2:新建项目配置好服务器,run on server,tomcat提示Directory Listing For/ 表示没有读到项目目录
解决办法2:实际上是因为没有在根目录下建立初始界面。如index.jsp 等xml中配置的欢迎界面! Music项目根目录是WebContent 根目录而已自己编辑名字。