日常J2EE开发中遇到的问题积累

        在日常工作中经常遇到开发过程中的小问题,但是就是这些小问题往往会耗费我们大量的时间,当我们最终解决它时,我们更多的事无语加呵呵。

        我已经很厌烦这些让我无语的问题了,所以自己把遇到的问题都给总结起来,方便自己或许也方便大家。

        废话少说,下面我会进行各方面遇到的问题归纳:

        1.我们在数据库中建立的字段为Date类型的,那我们怎样直接可以将他们进行相关比较呢?比如,你要查询某个日期区间的数据,这样你在前台大多数是要用户输入开始和结束的日期(一般如2015-08-04)这样格式的String类型的字符串,那么你要如何用起来呢?

           答: 其实SQL语句中已经有了相关的函数来实现这样的功能。

                    例子如下:

 
 
<pre name="code" class="java">                         //20150803 添加 根据发布时间查询公告(起始时间)
          if ( bpublishtime != null && !"".equals(bpublishtime)) {
              sb.append("and to_char(PUBLISHED,'yyyy-mm-dd hh24:mi:ss')>=?");
              params.add(bpublishtime);
                }
 

                             and 就是条件连接词,to_char(数据库要比较的字段,"所要比较的时间转化类型")>= ?  就是跟你传入的参数进行比较   

                            上面的例子 重点是讲述to_char 这个函数,其他部分要根据实际情况自己解决对应问题。

          2.js 判断浏览器类型并加载相应的css文件

                           

                             答:
 function userAgent(){
       var ua = navigator.userAgent;
       ua = ua.toLowerCase();
       var match = /(webkit)[ \/]([\w.]+)/.exec(ua) || /(opera)(?:.*version)?[ \/]([\w.]+)/.exec(ua) || /(msie) ([\w.]+)/.exec(ua) || !/compatible/.test(ua) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec(ua) ||  [];
  //match[2]判断版本号
       switch(match[1]){
       case "mozilla":    //Firefox
      setActiveStyleSheet("Main.css");  
         break;
         default:    
         break;
      } 
}
              userAgent();
    function setActiveStyleSheet(title)  
          {   
  document.getElementsByTagName("link")[0].href="manage/css/"+title;  
                                    }   

       3.实现输入框联想功能(就像百度那样输入1 下面出现好多数据 这样的形式)

               答:实现这样的功能 就是利用ajax 异步实现的

                           直接上代码

                                        前台jsp:

                                     

   就针对这个输入框 ,实现输入联想。
            <input id="input5" name="address" autocomplete="off" type="text" οnkeyup="getAddress();changestyles()" value="${empty address ? '输入地址':address }" οnfοcus="if (value =='输入地址'){value =''}" οnblur="if (value ==''){value='输入地址'}" οnclick="Clear()" />  
                    关键是onkeyup 里面调用的方法,我都封装在 js中。

                                      js代码(兼容非IE):

                                我的这种ajax 写法比较low  大家可以把我的写法换掉,重在实现思路。

                                首先判断浏览器类型  实现创建对应兼容的xmlHttp。

                                
                      var xmlHttp;
                      function createXMLHttpRequest(){
                          if(window.ActiveXObject){
                            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                                    }else{
     
                            xmlHttp = new XMLHttpRequest();
                                 }
                                         }
                           function getAddress(){
               var list=document.getElementById("table1"); //获取到要迭代的table
               var address = document.f.address.value; //获取输入框输入的值
               if(address==""){   //判断 如果输入框为空时   下面的联想框 都不可显示 且 不往下继续执行
       list.innerHTML="";
       document.getElementById("div4").style.display = "none";
       return false;
}
                  //如果 不为空 执行下面
             document.getElementById("div4").style.display = "block";
            document.getElementById("table1").style.display = "block";
                    createXMLHttpRequest();
                    var url = "getAddress.action?address="+address;
                   xmlHttp.open("post",url,true);
                   xmlHttp.onreadystatechange = processResp;
                   xmlHttp.send(null);
   }
 function trFunc(tr){//实现点击联想框的每一行,可以将其中的内容添加到相应的输入框中
document.getElementById("input5").value=tr.innerHTML ;
        document.getElementById("div4").style.display = "none";
     }
//回调函数
function processResp(){
if(xmlHttp.readyState==4 && xmlHttp.status == 200)
{
var list=document.getElementById("table1");
list.innerHTML="";
var div = document.getElementById("div4");
var data = JSON.parse(xmlHttp.responseText);//将后台传送来的数据转化为json模式
if(data.length==0){//如果data数据为空 则不显示联想列表
                 document.getElementById("div4").style.display = "none";
}
                      如果data数据不为空,则就对数据的显示样式进行设置
for(var i = 0; i < data.length; i++){
var tr = document.createElement("tr");//新生成一个tr ,就是一行
tr.appendChild(document.createTextNode(data[i]));//将data数据的每一条数据放到每一行中
                        list.appendChild(tr);   //list  为我们获取的迭代数据的table, 将每一行放到table中,形成一个完整的table用来展示数据
}
for(var i=0;i<list.rows.length;i++)//这边是给table的每一行添加onclick动作
    {
        list.rows[i].onclick = new Function("trFunc(this)")
    } 
}
}
                     function Clear(){//实现用户点击输入框时,可以对联想框实现清空小消失功能
document.getElementById("div4").style.display = "none";
                           }

   js代码(兼容IE):

<span style="font-size:18px;">var xmlHttp;
function createXMLHttpRequest() {


if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");


} else {


xmlHttp = new XMLHttpRequest();
}
}
function getAddress() {


createXMLHttpRequest();
var div = document.getElementById("div4");
var address = document.f.address.value;
if (address == "") {
div.innerHTML = "";
document.getElementById("div4").style.display = "none";
return false;
}
document.getElementById("div4").style.display = "block";
var url = "getAddresss.action?address="
+ encodeURI(encodeURI(document.f.address.value));//
xmlHttp.open("get", url, true);
xmlHttp.onreadystatechange = processResp;
xmlHttp.send(null);
}
function trFunc(tr) {
document.getElementById("input5").value = tr.innerHTML;
document.getElementById("input5").style.color="black";
document.getElementById("div4").style.display = "none";
}
//回调函数


function processResp() {


if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
var div = document.getElementById("div4");
div.innerHTML = "";
var jsons = xmlHttp.responseText;
var s;
if (typeof (JSON) == 'undefined') {
s = eval("(" + jsons + ")");
} else {
s = JSON.parse(jsons);
}


for ( var i = 0; i < s.length; i++) {


$("#div4")
.append(
"<table id='table2" + i + "'><tr style='cursor:pointer; color:white;' id='tr' >" + s[i]
+ "</tr></table>");


}


for ( var j = 0; j < 10; j++) {
var list = document.getElementById("table2" + j);
                
for ( var i = 0; i < list.rows.length; i++) {
list.rows[i].onclick = new Function("trFunc(this)")
}
}
}
}


function Clear() {


document.getElementById("div4").style.display = "none";


}</span>




              后台代码:

                            
     public List<String> getAddresss() {
try {
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
String address = new String(request.getParameter("address")
.getBytes("iso8859-1"), "utf-8");//获取前端输入框的值 并进行转码 成中文
response.setContentType("text/text;charset=UTF-8");//给发送到前端的数据  设置编码格式 这边适合非IE浏览器
PrintWriter out = response.getWriter();
List<String> searchAddressIndex = appwatchservice
.searchAddressIndex(address);//调用后台接口获得所要传送的数据
Gson gson = new Gson();
String result = gson.toJson(searchAddressIndex);//利用Gson将数据转化为 json进行传送
out.print(result);//发送数据到前端
out.flush();
out.close();//关闭流
} catch (Exception e) {
e.printStackTrace();
}
return null;
        }
后台代码(兼容IE浏览器):
public List<String> getAddresss() {
try {
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
address = URLDecoder.decode(request.getParameter("address"),
"UTF-8");
response.setContentType("text/text;charset=UTF-8");
PrintWriter out = response.getWriter();
List<String> searchAddressIndex = appwatchservice
.searchAddressIndex(address);
Gson gson = new Gson();
String result = gson.toJson(searchAddressIndex);
out.print(result);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}            

                   大家自行对比其中的不同

                 开发要的是思路,我们要看懂每一步在干嘛,问题自然就迎刃而解!!

                 今天就写这么多,以后会继续更新相关问题。


       


     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值