在日常工作中经常遇到开发过程中的小问题,但是就是这些小问题往往会耗费我们大量的时间,当我们最终解决它时,我们更多的事无语加呵呵。
我已经很厌烦这些让我无语的问题了,所以自己把遇到的问题都给总结起来,方便自己或许也方便大家。
废话少说,下面我会进行各方面遇到的问题归纳:
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;
}
大家自行对比其中的不同
开发要的是思路,我们要看懂每一步在干嘛,问题自然就迎刃而解!!
今天就写这么多,以后会继续更新相关问题。