181.项目中须要用到commons-email,想通过maven引入。
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.2</version>
</dependency>
在下载javax-mail的时候。遇到问题了。
我不断尝试各种方法,最后把Maven从Classpath删除了,然后想再把maven增加到Classpath下。
结果总是失败。
先尝试把项目删除。再又一次导入。结果还是不行。
最后,把项目的Maven特性禁掉,Disable maven nature,再把项目convert to maven。这个时候
Maven就增加到Classpath了,然后jar包也都顺利下载了。
182.checkbox复选框表单提交。
<form action="b.html" method="post">
<input type="checkbox" name="bike" value="1" />
I have a bike
<br />
<input type="checkbox" name="car" />
I have a car
<input type="submit" value="submit"/>
</form>
假设不选中,不会被提交。
假设选中,假设没有设置value。值是on,比方car=on。
假设value有值,比方1,那么car=1被提交。
183.超链接的URL,假设直接带中文,easy出现乱码。
Freemarker把中文名字进行url编码。
<#setting url_escaping_charset='utf-8'>
<#assign url="${base}/search/search.html?keyword=${keyword?
url}"/>
http://fansunion.cn/search/search.html?
keyword=%E5%A4%A7%E5%AD%A6&pageNo=2&pageSize=20
184.Maven、Eclipse等常常出现的“非法字符”问题。
错误: 非法字符: 65279
.java文件是UTF-8,有BOM的。
用Nodepad打开,另存为没有BOM的。
185.一个非常奇怪的问题。
一个静态变量public static String luceneIndexDir = "c://lucene";
程序某个地方会改动为,从配置文件读取的值,比方/root/lucene。
在线上Linux环境的值怎么变成了“/root/C:/lucene”。
实在是搞不明白啊。
本地却是正常的。
最后改了,把luceneIndexDir的初始值设置为空,就没有问题了。
186.replace into。
replace into 跟 insert 功能相似,不同点在于:replace into 首先尝试插入数据到表中,
1. 假设发现表中已经有此行数据(依据主键或者唯一索引推断)则先删除此行数据,然后插入新的数据。
2. 否则,直接插入新数据。
要注意的是:插入数据的表必须有主键或者是唯一索引!
否则的话。replace into 会直接插入数据,这将导致表中出现反复的数据。
除了主键。唯一索引也是能够的。unique。
唯一索引,能够是一个字段。也能够是多个字段。
187.Nginx域名跳转与“=”。
server_name fansunion.cn www.fansunion.cn blog.fansunion.cn;
if ($host = 'blog.fansunion.cn'){
rewrite ^/(.*)$ http://fansunion.cn/ permanent;
}
if ($host != 'fansunion.cn'){
rewrite ^/(.*)$ http://fansunion.cn/$1 permanent;
}
把blog.fansunion.cn永久跳转到Fansunion.cn
www.fansunion.cn,去掉www,为fansunion.cn。
推断相等,是用“=”,而不是“==”。
188.登录再跳转的时候。浏览器非常可能没有又一次刷新页面。用的是曾经的“缓存”。
手动刷新就能够了。
189.Mybatis取值。特殊场景。
List<Map<String, Object>> findAllByUserId(Long userId);
<select id="findAllByUserId" resultType="java.util.Map">
<if test="userId != 1">and ur.user_id = #{userId}</if>
order by p.parent_acl asc, p.sort_no,p.acl
</select>
这个地方,出了问题,#{userId}能够取得值。
而 test="userId != 1"的userId,报错。提示:
“There is no getter for property named 'userId' in 'class java.lang.Long'”。
假设參数类型使用Map或者Bean就能够,或者使用@Param("userId")标注下。
190.Java的Long比較。
Long id = 1L;
id.equals(1);
返回false。
id.equals(1L);
Long型的,都得显示指定L,标志这个整数是Long类型的。
191.Mybatis的@Select注解中不能直接使用<if></if>表达式,在xml中才行。
192.Mysql的replace into。先运行delete,再运行插入操作。
会导致表的主键id,会不断变化。
id user_id role_id,user_id和role_id作为联合唯一unique索引。
193.客户遇到了个问题。数据库调用存储过程,插入的数据为乱码。
call p_user_register('email2','雷文','123','11',1,@a,@desc);
select @a;
select @desc;
百度了下,在百度知道找到了调用方式和获得返回值的使用方法。
我本地没有出现乱码,推測客户那边可能是由于mysql安装时没有指定utf8编码。
后来找到问题了,假设数据库原有编码是GBK。直接改数据库编码为UTF8,尽管编码变了,可是还是easy遇到乱码。
重建数据库,选择utf8编码,再导入数据,或运行存储过程。就不会有乱码了。
194.mysql导入sql。出现故障,然后就卡住了,导致后面的正常数据也无法导入。
问题一般出如今,用mysql-front等可视化工具导入sql。
假设出现这样的问题,直接在dos命令行中,source c:/p2p.sql,就算遇到了错误。
也会直接跳过。不影响正确的导入。
195.今天发现Eclipse的一个好功能。
项目名称-右键菜单-Source->Fromat,Clean up等。
196.晚上把中国象棋2开源到CSDN-Code,结果由于声音文件比較大,导致push失败。
所以。先把本地的删除。再同步。再分批次,提交大的文件。
197.近期两天遇到了,复选框无法提交多个值的问题。
今天,找到了问题原因,后端表单组件是某个同事写的,有bug。
最初以为是,SpringMVC接收參数的方式不正确。后来想到查看HTTP请求。发现仅仅有1个。
再写一个原生的form表单。发现是能够有多个的,这样就确定了问题。
198.checkbox表单提交,用数组接收比較合适。map不行,仅仅能接收到一个,多个值会覆盖。
<input type="checkbox" name="privileges" value="${item.acl}"/>
public void doadd(RoleForm params,Model model) {
}
RoleForm {
private Integer id;
private String name;
private String remark;
private Map<String, Object> privilege;
private Integer[] privileges;
}
199.Map的局限性,类型不够明白。
Map没有Model清晰,也不利于面向对象编程,也不能充分利用java内置的特性,比方equals。
List<Map<String, Object>> ownPrivilegeList=privilegeService.listByRole(id);
List<Map<String, Object>> privilegeList = privilegeService.listAll();
2个集合中的map。不是同一个对象,可是他们的id是一样的。
假设是对象。重写equals方法,依照id进行比較,就能够使用
List.contains方法了,而用map仅仅能自己手写。
private boolean contains(List<Map<String, Object>> ownPrivilegeList,
Map<String, Object> p) {
for(Map<String, Object> own:ownPrivilegeList){
if(own.get("acl").equals(p.get("acl"))){
return true;
}
}
return false;
}
Apache的MapUtils方法,也没有这个比較的。
200. 假设用mysql的“replace into”实现add方法。方法的名字用add感觉不太合适。
由于update方法,也会调用这个。
@Insert("replace into p2p_user_role(user_id,role_id) values (#{user_id},#{role_id})")
void addOrUpdate(Map<String, Object> params);
使用addOrUpdate,更好,这样service层add和update方法都能够调用底层的dao方法,不会出现歧义。
原文首发:http://fansunion.cn/article/detail/565.html