zoukankan      html  css  js  c++  java
  • 2014年工作中遇到的20个问题:181-200

    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,如果直接带中文,容易出现乱码。

    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,虽然编码变了,但是还是容易遇到乱码。

    重建数据库,选择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

  • 相关阅读:
    margin、padding单位百分比
    Javascript CustomEvent
    javascript 复制数组
    gulp 小坑一个
    Gulp livereload
    node入门笔记
    jQuery操作input改变value属性值
    阅读笔记-A Message To Garcia
    读书笔记-忆见未来
    js this pointer 指针
  • 原文地址:https://www.cnblogs.com/qitian1/p/6463028.html
Copyright © 2011-2022 走看看