15至17年时记录的一堆杂事

2015.7.3
1.  花了两天时间研究导入项目,被MyEclipse的Build Path伤到,然后……发现Add External Class Folder的问题,应当用Add JARs/AddExternal JARs!!!那么问题来了,添加添加一个文件夹下的所有JARs有木有简单的引用方法呢=。=添加一堆看得心烦
2.  导入工程后,TomCat无法部署成Exploded,需要在.project文件里添加 <nature>com.genuitec.eclipse.j2eedt.core.webnature</nature>添加后还必需把MyEclipse重启一遍。后来发现,还和.mymetadata(特别重要……涉及在TomCat的哪个文件夹下存工程)也有关系……


2015.7.5
没人有带真心头痛啊,一个项目环境我都搭不好,折磨我了两个工作日……今晚又用了几个小时研究Import工程和New一个Web Project区别到底在哪里……结果发现自己完败,即使把不同的地方都填上了Import的结果依旧404……后来发现……问题在WEB-INF下的config.properties,连接的服务器地址为host=192.168.5.5


2015.7.10
本来本周要搞定的东西很容易,但最后发现工程老是用自己某个包(这个包正常情况是该删的!),导致了JAVA类怎么修改都不影响结果……最后发现……BOSS给的工程就是个环境有问题的坑!问题在于.classpath、.settings以及lib对应的包……所以还是重新建一个Web工程更靠谱!
然后写方法遇到的阻力是,因为不了解页面居然是ajax调用的……导致自己写的方法并不能运行……因为返回页面值的方法只有一个……然后……就没多少然后了,现在发现当初很怕的ajax其实不过如此。
P.S. BOSS性子其实挺好的,而且他在意的是你写的东西你有没有真正弄懂,而不是这东西能不能正常使用。


2015.7.17
一直让我觉得传参应该是个很简单的事,结果在javascript里写html就问题一堆……
        var str = "509edbe9-2914-431f-9128-97d368b7da0b";
       //错误的写法
        var html = '<button class="button" id="ensure" onclick="test(str)">确定</button>';//把字符传作为参数传给函数,直接报错
      //正确的写法
       var html = '<button class="button" id="ensure" onclick="test(\''+str+'\')">确定</button>';//正确执行,注意第一个\后是两个单引号


2015.7.28
为了能更好地看到引用包的类是怎么写的,所以添加了来源RAR文件,但打开后中文全是乱码,即使把环境和整个工程改成UTF-8也一样。后来发现应该把打开的RAR文件弄成GBK的,所以eclipse->window->preferences->General->Content Types->JAR Content中改成GBK就行了。


2015.8.2
想了半天前台应该怎么在两个不同的班级中间添加行的问题,最后用each+eq的方法找到位置,然后成功添加。
  $.each($(".className") ,function(i,val){
    the = $(".className").eq(i).attr('value');
    if(i>0)
    {
      if(the != before)
      {
        $(".videotr").eq(i).before('<tr><td colspan="5" style="height:8px;"></td></tr>');
      }
    }
    before = the;
  });


2015.8.7
折磨了我好多天的进度条问题终于告一段落,利用静态值+立即置空的方法勉强完成,按道理来说用个插件很容易解决的事却获得不到session...果然很多东西要连带写才好解决啊。


2015.8.21
MyEclipse的Debug功能真心好用,前台调不出来的值,用后台就能查出具体情况,然后查get方法能找出结果来=。=


2015.8.31
前台某个JS方法居然找不到,解决方法居然是把JS的代码放在前面…… 原来它真的有时候不能放在后面啊……


2015.9.11
浪费了近3个小时,就是因为ligerui的代码里多了个逗号!导致IE8报错无法正常查询,并且IE8自带的开发者工具报的错云里雾里不明其意,而其他浏览器表示正常运行无压力,IE8真心坑!!!
        parms: [
                 { name: 'approvalModel', value: approvalModel},
                 { name: 'timeBegin', value: timeBegin},
                 { name: 'timeEnd', value: timeEnd}
               ] }


2015.9.17
1.  昨天忽视了ajax中"dataType" : "html"是什么意思,结果就因为这个弄了半天怎么会没有获取到json!
2.  从后台构造一个Json再从JS解析还真是不容易……难怪select会直接飞到一个新的ftl然后再传回html格式的……不过那种也麻烦
 java:List<Map<String, Object>> recordList = new ArrayList<Map<String, Object>>();
        for(int i=0;i<registerInfos.length;i++)
        {
          JSONObject member = new JSONObject();
          member.put("payMoney",   new Money(registerInfos[i].payMoney).toString()); //已付款
          member.put("arrearsMoney",   new Money(registerInfos[i].arrearsMoney).toString()); //欠款
          recordList.add(member);
        }
javascrip: var newList = eval(data.newList);
              for(var i in newList) {
                $(".payMoney:eq("+i+")").html(newList[i].payMoney);
                $(".arrearsMoney:eq("+i+")").html(newList[i].arrearsMoney);
              }


2015.9.21
表格的宽度居然不和td设的属性一致!!!改了半天,,火狐终于不会因为收缩变动了,但是IE却会!!!后来发现……table的css中设置table-layout:fixed简直神器,但!它的宽度就再也不会变了,怎么和网上说的不一样啊!!!最后!用百分比的宽度完美解决问题,可是……为什么最后相加为90%时不会变了?还有10%难道被其他的CSS给吃了?最最终发现……原来神器说的第一行就只能是第一行……因为之前的第一行被用去合并了……所以还是神器好用。


2015.9.24
直接在地址栏里写中文,输入到后台会无法正常显示,原因在于它并没通过任何页面,所以被tomcat进行编码,而tomcat的自动编码是用iso8859-1标准进行的,所以需要先判定它是否被其编码(因为要同时兼容正常向传过来的值),然后再以“ISO-8859-1”编码方式转化成字节数组,而“utf-8” 是目标编码方式。
    if(jsonData.equals(new String(jsonData.getBytes("iso8859-1"), "iso8859-1")))
    {
      jsonData=new String(jsonData.getBytes("iso8859-1"),"utf-8");
    }


2015.10.14
为了找选中项的ID,用find("option:checked").attr("id")结果发现在火狐下没问题,IE8我就呵呵了……最终发现,只要把它变为find("option:selected").attr("id"),在IE8下也能正常运行,一词之差啊。


2015.10.15
- -|||JAVA写循环时不能把需要赋值的类放在循环外边,否则可能只会把指针传进去导致每个数组值相同。


2015.10.18
找了半天的备注,结果在继承类的方法里,唉我也是醉了……
freemarker传值的感叹号终于有了妙用,js里完全没办法处理"\n"的问题,而此时把值直接放到textarea就没问题了。


2015.11.11
花了一个多小时去找My97 DatePicker改变input后的调用方法,还有人研究了很久,因为火狐不兼容onpropertychange……最终发现,它自带的onpicked直接解决问题,果然开发者早就想好了这种情况。


2016.1.30
我居然没记录,虽然ajax的异步处理很强大,但改为"async":false,可以进行同步处理。


2016.3.4
换单选和多选的效果,虽然下面纯CSS方法也能解决问题,但需要CSS3,到IE8上就不行了……
(P.S.2017.12.19补:只能是非嵌套关系的label和input)
label {
    cursor: pointer;
    position: relative;
    padding-left: 25px;
    margin-right: 15px;
}
input[type=radio],input[type=checkbox] {
    display: none;
}
label:before {
    content: url(${staticPath}/images/icon/radio_before.jpg);
    width: 17px;
    height: 19px;
    margin-right: 10px;
    position: absolute;
    left: 0;
    bottom: 0;
}
input[type=radio]:checked + label:before {
    content: url(${staticPath}/images/icon/radio.jpg);
    color: #33cccc;
    font-size: 20px;
    text-align: center;
}
input[type=checkbox]:checked + label:before {
    content: url(${staticPath}/images/icon/radio.jpg);
    color: #33cccc;
    font-size: 20px;
    text-align: center;
}
     <input type="checkbox" id="checkCookie" onclick="checkCoo()" checked="checked" />
     <label for="checkCookie">在此电脑上记住帐号</label>
2.适用于各浏览器,但不得不加上JS:
label{  color:#5d6b8c;  height:20px;  padding-left:25px;  float:left;}
.lable_radio{  width:40px;}
.lable_checkbox{  width:200px;}
input[type=radio],input[type=checkbox]{  position: absolute;  left: -500px;}
label{  background:url(${staticPath}/images/icon/radio_before.jpg) no-repeat;}
label.a{  background-image: url("${staticPath}/images/icon/radio.jpg");}
                  <input type="radio" name="user" checked="checked" id="teacher" value="tea" onclick="funt('tea')" />
                  <label id="label_tea" class="lable_radio" for="teacher">员工</label>
$(function () {
  $(".lable_radio").click(function () {
    $(".lable_radio").removeClass("a");
    $(this).addClass("a");
  });
  $(".lable_checkbox").click(function () {
    if($(this).hasClass("a"))
    {
      $(this).removeClass("a");
    }
    else
    {
      $(this).addClass("a");
    }
  });
});


2016.3.17
一个很简单的问题被我弄复杂了T.T position:absolute和position:fixed被我弄混了……用fixed可以实现悬浮效果,但我要的其实是absolute的效果……


2016.3.31
找了两个多小时的问题……某个页面IE8出不来图,其他页面都正常,结果发现并不是该块代码的问题,而是前面主页页面少了一个引号!导致IE8的html最后少了个尖括号……
一个JS的浏览器判定问题
var newHtml = "";
if (!!window.ActiveXObject || "ActiveXObject" in window)  
{
  newHtml += '<embed class="isIE" src="${CP}/servlet/docDownload?id=' +fileCode+ '" width=70 height=30 loop=false controls=smallconsole autostart=false></embed>';
}
else
{
  if(isFirefox=navigator.userAgent.indexOf("Firefox")>0)
  {
    newHtml += '<div style="width:28px;overflow:hidden;float:left;"><audio class="noIE" controls>';
  }
  else
  {
    newHtml += '<div style="width:40px;overflow:hidden;float:left;"><audio class="noIE" controls>';
  }
  newHtml += '<source src="${CP}/servlet/docDownload?id=' +fileCode+ '" type="audio/wav">您的浏览器不支持 audio播放</audio> </div>';
}


2016.4.11
IE8好恶心,会换行的格子,把其隐藏了会导致旁边的格子高度受影响……


2016.4.12
在IE8中找了半天下拉选项为什么会变高的原因,最后发现居然是第一行的注释问题!!!!!!我了个去,注释和这个东西有半毛钱关系?微软的员工你敢出来解释解释么?


2016.5.6
不知道highcharts是什么情况,用它标准例子写的:$('#diagram_div').highcharts({ });会出错。
还是用var chart1;chart1 = new Highcharts.Chart({ chart: {renderTo: 'diagram_div',}});正常运行,虽然IE8仍然存在错误。


2016.5.27
直接也是在新方法中出现500直接断的情况,结果发现,就是没更新包的问题……


2016.5.29
两个数组合并+去重的方法,另外如果是从前台传过来的字符串,可以先合并!
      Set<String> set = new TreeSet<String>();
      for (String s : oldCodes)
        set.add(s);
      for (String s : newCodes)
        set.add(s);
      String[] both = set.toArray(new String[0]);


2016.7.11
郁闷了几天的为什么修改JAVA不会自动更新工程的问题,结果发现只是因为服务器上的部署没有删干净而已。不过还找到一个因为.classpath被人修改了output而导致其原因的例子。


2016.8.12
因为书写顺序问题,只有:text-overflow:ellipsis;-moz-text-overflow:ellipsis;overflow:hidden;white-space: nowrap;
才能实现超过td文字变省略号,另外还要给table加上table-layout:fixed;
续:2016.11.14


2016.9.6
为了让div知道内部容器的高度实现自适应
增加一个BR并设置样式为clear:both。<br style="clear:both;" />


2016.9.19
前提:JFinal框架
折腾了两天的银行系统对接问题,实质上就是InputStream in = null;
in = SDKConfig.class.getClassLoader().getResourceAsStream(FILE_NAME);
的路径获取不对,因为服务器上居然是把classes全部打包到一个jar里放到lib下的,所以它的路径和本地的不一样。
但问题还不在这里……我先是把它改成in = SDKConfig.class.getClassLoader().getResourceAsStream("../"+FILE_NAME);
结果发现,它获取方法根本跳不出它那个jar包!虽然在本地上也是可以正常使用的!
然后把它代码改回去,把properties放到jar包中,居然正常了!!!可是,这样老板肯定是不要- -|||
唉,干脆写成in = new FileInputStream(new File("D:/certs/config.properties"));果然可以……
但……肯定还是不要的- -|||
于是寻找之前获取properties内容的方法,结果发现在继承了JFinalConfig并使用了loadPropertyFile("config.properties");后。
它只能是直接获取文件内容!!!但是这银行的对接系统要的只是路径啊,然后通过路径去解析文件。
于是找了半天获取路径的方法,最终找到了救命稻草:
in = new FileInputStream(new File(PathKit.getWebRootPath() + File.separator + "WEB-INF\\" + FILE_NAME));


2016.11.14
明明以前弄成功的显示隐藏,又出现了问题最后发现,居然只是因为IE8少了个word-wrap:normal便不能成功,所以正确的写法是td上面加:white-space:nowrap;word-wrap:normal;overflow:hidden;text-overflow:ellipsis;
缺少一个IE8都不能实现。


2016.11.18
所有浏览器中,只有BOSS的并不会显示更新数据…… 后来找到方法:把IE设置为每次获取新数据,但这样确实治标不治本,后来发现:
$.ajaxSetup ({
  cache: false //设置成false将不会从浏览器缓存读取信息
});
这么一段代码!!!原来这个东西是这么重要啊,虽然没有再测过,不过问题应该是解决了。


2017.3.19
左侧和上侧固定表格的范例:
<style>
.title table{background-color:#eee;}
.title td{white-space:nowrap;word-wrap:normal;overflow:hidden;text-overflow:ellipsis;}
.show{text-align:center;table-layout:fixed;}
.show td{border:1px solid #ccc;padding:5px 10px;font-size:12px;}


.t_left{width:183px;float:left;}
.t_left table{width:100%;}
.cl_freeze{overflow:hidden;width:100%;}
.cl_freeze td{height:35px;}


.t_r{float:left;}
.t_r_t{width:100%;overflow:hidden;}
.t_r_content td{height:35px;}
.t_r_content{width:100%;background:#fff;overflow:scroll;}
</style>
  <div class="t_left title">
    <table class="show">
      <tr>
        <td>&nbsp;</td>
      </tr>
    </table>
    <div class="cl_freeze">
      <table class="show">
        <#list areaList as list>
        <tr>
          <td>${list.name!}</td>
        </tr>
        </#list>
      </table>
    </div>
  </div>
  <div class="t_r">
    <div class="t_r_t title">
      <table class="show">
        <tr>
          <#list areaList as list>
          <td>${list.name!}</td>
          </#list>
        </tr>
      </table>
    </div>
    <div class="t_r_content" onscroll="autoSroll()">
      <table class="show">
        <#list minuteList as list>
        <tr>
          <#list list.list as li>
          <td>
            ${li.minute!}
          </td>
          </#list>
        </tr>
        </#list>
      </table>
    </div>
  </div>
<script>
function autoSroll()
{
  var a = $(".t_r_content").scrollTop();
  var b = $(".t_r_content").scrollLeft();
  $(".cl_freeze").scrollTop(a);
  $(".t_r_t").scrollLeft(b);
}


//获取浏览器高度和宽度,用于适应浏览器显示teble的大小  
var winWidth = 0;//浏览器窗体内部宽度初始化  
var winHeight = 0;//浏览器窗体内部高度初始化  
function findDimensions() //函数:获取尺寸  
{
  //表格宽度
  var table_width = parseInt(${length})*120;
  $(".t_r table").css("width", table_width + "px");
 
  //获取窗口宽度 、高度
  if (window.innerWidth)
  {
    winWidth = window.innerWidth;
    winHeight = window.innerHeight;  
  }
  else if ((document.body) && (document.body.clientWidth))
  {
    winWidth = document.body.clientWidth;  
    winHeight = document.body.clientHeight;  
  }
  $(".cl_freeze").css("height", winHeight - 110 + "px");
  $(".t_r_content").css("height", winHeight - 90 + "px");
}  
findDimensions();//调用函数,获取数值  
window.onresize=findDimensions;//触发窗体大小改变事件
</script>


//十字选择
function choose(obj)
{
  var index = $(obj).index();
  $(".t_r_content td").removeClass("blue");
  $(".t_r_content tr").each(function(){
    $(this).find("td").eq(index).addClass("blue");
  });
  $(obj).closest("tr").find("td").addClass("blue");
}


2017.3.28
//用于多选
var rem=new Array();
function shift_select(){
  $("#t_r_content td").click(function (e){
    rem.push($("#t_r_content td").index($(this)));
    if(e.shiftKey)
    {
      var iMin = Math.min(rem[rem.length-2],rem[rem.length-1]);
      var iMax = Math.max(rem[rem.length-2],rem[rem.length-1]);
      for(i = iMin; i <= iMax; i++)
      {
        $("#t_r_content td:eq("+i+")").addClass("lightblue");
      }
    }
    else if(e.ctrlKey)
    {
      $(this).addClass("lightblue");
    }
    else
    {
      $("#t_r_content td").removeClass("lightblue");
      $(this).addClass("lightblue");
    }
  });



2017.3.31
判定重复
var arr=[];
arr.push(date);
var nary = arr.sort();
for(var i = 0; i < nary.length - 1; i++)
{
  if (nary[i] == nary[i+1])
  {
    alert("重复!");
    return;
  }
}


2017.4.1
ContextMenu插件的使用方法:
  <div class="contextMenu" id="myMenu">
    <ul>
      <li id="m_move">打开</li>
      <li id="email">邮件</li>
      <li id="save">保存</li>
      <li id="delete">关闭</li>
    </ul>
  </div>
  //绑定右键菜单
  $(".right_select").contextMenu("myMenu",
  {
    bindings:
    {
      "m_move": function(t) {
        alert('Trigger was '+t.id+'\nAction was Open');
      },
      "email": function(t) {
        alert('Trigger was '+t.id+'\nAction was Email');
      },
      "save": function(t) {
        alert('Trigger was '+t.id+'\nAction was Save');
      },
      "delete": function(t) {
        alert('Trigger was '+t.id+'\nAction was Delete');
      }
    }
  });


2017.5.19
关于网络安全的研究,其中第一个就是XSS攻击,在网络上试用了半天的filter拦截器,修改web.xml,发现虽然它确实能拦截,但是获取的内容不对啊!最后通过JFinal的关键字去找针对性的方法,发现了重写http://blog.dreamlu.net/blog/57 重写getParameter的方法,但是写完之后完全没有触发??最后找到了http://blog.csdn.net/sinat_34396176/article/details/53782595 才知道需要修改配置文件:
  @Override
  public void configHandler(Handlers bean)
  {
    bean.add(new XssHandler());
  }
最后解决了此问题。


2017.6.1
把post请求改为同步
$.ajaxSettings.async = false;
$.post();
$.ajaxSettings.async = true;


2017.6.10
X年X月X日,替换为X-X-X
  var reg=/(.*)年(.*)月(.*)日/g;
  date = date.replace(reg,"$1-$2-$3");


2017.6.13
整行上移
  var obj = $(".popblue");
  if(obj.prev("div").html() != null)
  {
    obj.prev("div").before(obj.prop("outerHTML"));
    obj.remove();
  }


2017.6.16
之前困扰我的一个问题突然解决了,由于一个方法调用另一个java的方法时,获取不到前台传过来的值,没想到可以直接在继承类里面写,然后共同调用。


2017.6.19
又来一个变态需求,需要在打开新页面的同时,把原页面冲突标红:
1.虽然用target="_blank" + 
  $("#page_form").on("submit", function() {
    $(this).ajaxSubmit({
      type: "post",
      url: "${CP}/t/counselor/myReschedule/saveReschedule",
      success: function(data) {
        $(".loading").hide();
        alert(data.msg);
        if(!data.errno)
        {
          window.close();
        }
      }
    });
    return false; //阻止表单默认提交
  });
解决了,但是再次调用该方法时却发现,它的submit居然叠加了!!!submit我还找不到能清空它的方法!!!
于是向BOSS提出,不打开新页面,而改为弹框,这样当然简单多了:
2. //结果 
$("#page_form").ajaxForm({
  success : function(data) {
    if(data.errno != undefined)
    {
      alert(data.msg);
      if(!data.errno && data.isSave)
      {
        window.close();
      }
    }
    else
    {
      docEditDialog = art.dialog({
        title: '标记下次回访时间',
        content: data,
        lock:true,
        fixed:true,
        background:'#fff',
        button: [ {
          name: '确定',
          callback: function () {
            setNextTime(codes);
          },
          focus: true
        }, { name: '取消' }]
      });
      return false;
    }
    $('.loading').hide();
  }
});
走json路线没有问题,但一旦走了html路线,再走一遍$("#page_form").submit();居然跳转了!不管json还是html都跳转了!!
不过这次解决没花多少时间,确定onsubmit="return false;"第二次点击无效后。把上面的ajaxForm包在了一个function里面,function的最后再跟上$("#page_form").submit();终于解决了问题!!!【好像后续还有其他问题,因为需求又变了】

猜你喜欢

转载自blog.csdn.net/guozhicaice/article/details/80929533