这些是本人作为java技术菜鸟中的菜鸟,刚来北京时,写的一下工作当中遇到问题和工作总结

2018-04-20 10:50:01 查看次数 707 分类: 编程技术>java视频教程 | 文章来源:http://www.ifx666.cn

摘要内容:这些是本人作为java技术菜鸟中的菜鸟,刚来北京时,写的一下工作当中遇到问题和工作总结。表单提交之前js验证通过在提交表单 点击不同按钮模拟submit提交

1、List集合查找一个名称是否存在,定义标识boolean flag=false,循环list,当找到这定义成flag=true;
//判断是否包含xxxxx
List<RoleRelationBean> jtjzg_roleList=roleRelationDicUtil.getOrgAndUser(jtjzg_map);
boolean jtjzg=false;
for (int j = 0; j < jtjzg_roleList.size(); j++) {
RoleRelationBean bean1=jtjzg_roleList.get(j);
if(bean1.getRole_code().equals(jtjzg_role_code)){
jtjzg=true;
}
}
2、


后台代码
@RequestMapping("findFatherIdList")
public void findFatherIdList(HttpServletRequest request, HttpServletResponse response){
try {
HashMap<String,Object> departmentmap=new HashMap<String,Object>();
String fatherid=StringUtils.trimToEmpty(request.getParameter("fatherid"));

departmentmap.put("fatherid", fatherid);
List<SamUserBean> departmentList=samUserService.findFatherIdList(departmentmap);

JSONArray jsonarray = JSONArray.fromObject(departmentList); 
response.setContentType("application/json;charset=utf-8");
PrintWriter out  = response.getWriter();
out.print(jsonarray.toString());
out.close();

} catch (Exception e) {
logger.error("获取父信息异常,异常信息:"+e);
}

}


前端js代码
$(document).ready(function(){
$.ajax({
url:"<%=path%>mUser/findFatherIdList.action",
type:"post",
data:{"fatherid":10010000},
dataType:"json",
success:function(result){
  for(var i=0;i<result.length;i++){
         $('#organizationid').append("<option value='"+result[i].departmentid+"'>"+result[i].department+"</option>");
      }  
},
error:function(){
alert("响应失败!");
}
});
});




3.List每remove掉一个元素以后,后面的元素都会向前移动,此时如果执行i=i+1,则刚刚移过来的元素没有被读取
解决方法:三种方法
1.〉倒过来遍历list
Java代码


    for (int i = list.size()-1; i > =0; i--) {
      if (((String) list.get(i)).startsWith("abcde")) {
       list.remove(i);
      }
    }


2.〉每移除一个元素以后再把i移回来
Java代码


    for (int i = 0; i < list.size(); i++) {
      if (((String) list.get(i)).startsWith("abcde")) {
       list.remove(i);
       i=i-1;
      }
    }


3.〉使用iterator.remove()方法删除
Java代码


    for (Iterator it = list.iterator(); it.hasNext();) {
      String str = (String)it.next();
      if (str.equals("chengang")){
       it.remove();
      }
    }




4.表单提交之前js验证通过在提交表单 点击不同按钮模拟submit提交
  <button id="submitmo" class="btn blue" type="submit" style="display:none;">提交</button>
  <button id="bn" class="btn blue" type="button" onclick="tijiaosubmit();">提交</button>


function tijiaosubmit(){
var org_code=$("#org_code").val();
if(org_code.length<4){
$("#org_code").focus();
return ;
}


$("#submitmo").click();
}


5.页面传递参数进入同一个controller走不同的业务逻辑,可以定义一个hidden域放置表示符


6.textarea属性根据内容自适应
//初始rows值
var rowszhi;
//鼠标移除textarea
function scrollvisible(obj){
$(obj).attr("rows",rowszhi);
$(obj).attr("style","overflow-y:visible");
}
//鼠标移入
function infoTableTaskfont_change(obj){
rowszhi=$(obj).attr("height");
//alert(rowszhi);
$(obj).attr("style","overflow-x:hidden");
$(obj).height(rowszhi);
var setheight = $(obj).get(0).scrollHeight;
if($(obj).attr("_height") != setheight){
  $(obj).height(setheight+"px").attr("_height",setheight);
}
else{
   $(obj).height($(obj).attr("_height")+"px");
}



7.防止重复提交按钮
1〉页面上一个button按钮 点击事件onclick 写上一个js函数 传递参数this把当前button对象传入
2〉当点击发送按钮 按钮被禁用显示发送中.... 发送完成之后解禁 还原按钮状态为 发送
<button class="btn green" type="button" onclick="sendMessage(this);">发送</button>
//点击事件函数
function sendMessage(obj){

actionDisabled(obj,true);

}
//禁用、解禁提交保存按钮0528
function actionDisabled(obj,flag){
if(flag){
$(obj).text("发送中...");
}else{
$(obj).text("发送");
}
$(obj).attr("disabled",flag);
}


8.限制键盘输入
//onpaste禁止复制粘贴、ondragenter禁止拖拽、ime-mode禁止切换输入法
<input id="key" maxlength="5" onpaste="return false;" ondragenter="return false;" style="ime-mode:disabled;">


//允许输入键:字母、数字、小键盘数字、退格、TAB、回车、左右、删除、HOME、END
$("#key").keydown(function(e){
var keyCode=e.which,keyArr=[8,9,13,37,39,46,35,36];
return (keyCode>=65 && keyCode<=90) || (keyCode>=48 && keyCode<=57) || 
(keyCode>=96 && keyCode<=105) || $.inArray(keyCode,keyArr)>-1;
});


9.一张数据表内统计各种数据sql语句 使用case when '字段'  then 1 else 0 end
SELECT organizer_name,SUM(CASE WHEN event_state='01' THEN 1 ELSE 0 END) AS weifankui,SUM(CASE WHEN event_state='02' THEN 1 ELSE 0 END) AS zzfg ,SUM(CASE WHEN event_state='03' THEN 1 ELSE 0 END) AS chuliwc ,
SUM(CASE WHEN event_state='01' THEN 1 ELSE 0 END) +SUM(CASE WHEN event_state='02' THEN 1 ELSE 0 END) +SUM(CASE WHEN event_state='03'THEN 1 ELSE 0 END) sumtotal,
ROUND((SUM(CASE WHEN event_state='03' THEN 1 ELSE 0 END)) /(SUM(CASE WHEN event_state='01' THEN 1 ELSE 0 END) +SUM(CASE WHEN event_state='02' THEN 1 ELSE 0 END) +SUM(CASE WHEN event_state='03'THEN 1 ELSE 0 END)),2)AS wanclv,
FLOOR(SUM(DATEDIFF(deadline,account_date)) /SUM(CASE WHEN event_state='03'THEN 1 ELSE 0 END))AS pjwanchengts
FROM t_matter_main


10.学会使用字符串拼接 新的String 前台传到的后台String字符串 使用split(",")把字符串转化成为字符串数组
String[] moth=monthSele.split(",");
循环字符串数组拿出各个值


11.springMVC mybatis 查询数据 mybatis sql视图或者sum avg 重新生成数据库和bean都没有的新字段时  返回值是HashMap <select id="getTmatterCount" resultType="HashMap" parameterType="HashMap">
把值放到HashMap,一条返回值就是hashmap对象 然后再放到ArrayList中 例如:List<HashMap<String, Object>> getMonthCount(Map map){}


12.通过id 保存一个中文名称和id到数据库 可以从前台页面获取id 然在后台通过id查询出来对应的中文名称 一起保存到数据库里即可


13.拼xml格式做为接口输出,需要在String xmlString="<?xml version=\"1.0\" encoding=\"utf-8\"?>";前面加上
response.setContentType("text/xml;charset=UTF-8"); response.setHeader("Cache-Control", "no-cache");保证
输出的是xml格式和保证不出现乱码


14.用户名和密码保存到cookie里


cookie是以键值对存在的 cookie.getName()拿到cookie名字 cookie.getValue()拿到值


Cookie cookie=null;
//创建一个cookie 以键值对方式放置
String userName=username+":"+password;
cookie = new Cookie("username",userName);
cookie.setMaxAge(3600);
response.addCookie(cookie);


获取cookie里的用户名和密码
//从cookie中获取用userid
String userid =request.getParameter("username");
Cookie cookies[]=request.getCookies(); //读出用户硬盘上的Cookie,并将所有的Cookie放到一个cookie对象数组里面
     //  其他界面取cookie
Cookie sCookie=null; 
if(cookies!=null){
for(int i=0;i<cookies.length;i++){    //用一个循环语句遍历刚才建立的Cookie对象数组
sCookie=cookies[i];   //取出数组中的一个Cookie对象
if(sCookie!=null){
String userName=sCookie.getName();
if("username".equals(userName)){
String[] userId=sCookie.getValue().split(":");
for (int j = 0; j < userId.length; j++) {
userid=userId[0];
}
}
}
}
}




15.灵活运用java 字符串常用方法 解决实际问题


例如xml格式  拿到name和value值


String  xml="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<root><form><item name=\"text\">*******</item>" +
"<item name=\"startdate\">2013-11-11 11:00:00;#</item>" +
" <item name=\"user\">user1;#user2;#user3</item>" +
" </form>" +
" <operation>" +
" <item name=\"yi\">reject</item>" +
" <item name=\"adminOpert\">同意</item>" +
" </operation>" +
"</root>";
                int begin=xml.indexOf("<root>");
int last=xml.lastIndexOf("</root>");
String newxml=xml.substring(begin, last);
newxml=newxml.replace("<root>", "");

int beginform=newxml.indexOf("<form>");
int lastform=newxml.lastIndexOf("</form>");
int beginoperation=newxml.indexOf("<operation>");
int lastoperation=newxml.lastIndexOf("</operation>");
String newxmloperation=newxml.substring(beginoperation, lastoperation);
String newxmlfrom=newxml.substring(beginform, lastform);

newxmloperation=newxmloperation.replace("<operation>", "");
newxmloperation=StringUtils.trim(newxmloperation);
String []newxmloper=newxmloperation.split("</item>");
for (int i = 0; i < newxmloper.length; i++) {
String newxml2=StringUtils.trim(newxmloper[i]);
String[] newxml3=newxml2.split("\">");
String formname=newxml3[0].replace("<item name=\"", "");
String formvalue=newxml3[1];
System.out.println("name="+formname);
System.out.println("value="+formvalue);
}


newxmlfrom=newxmlfrom.replace("<form>", "");
newxmlfrom=StringUtils.trim(newxmlfrom);
String []newxml1from=newxmlfrom.split("</item>");
for (int i = 0; i < newxml1from.length; i++) {
String newxml2from=StringUtils.trim(newxml1from[i]);
String[] newxml3from=newxml2from.split("\">");
String formname=newxml3from[0].replace("<item name=\"", "");
String formvalue=newxml3from[1];
System.out.println("name="+formname);
System.out.println("value="+formvalue);
}



16.接收json格式的数据之后 后台怎么解析拿到json的每个数据呢


if(!"".equals(incopath)){
JSONArray fileJsonArr = JSONArray.fromObject(incopath);
for(Object o : fileJsonArr){
JSONObject object = JSONObject.fromObject(o);//json字符串 转化成为json 数组 
String fileTrueName = object.getString("file_true_name");
//String file_name = object.getString("file_name");
//String file_size = object.getString("file_size");
file_type = object.getString("file_type");
String relative_path = object.getString("relative_path");
paths=fileServerUrl+relative_path+"/"+fileTrueName;
}
}


17.SWFUpload 上传修改时  当file 路径为空时 不执行update语句 


18.js 批量传递form表单值到js里  可以使用点击事件onclick 写函数例如setValue("id1","id2","id3","id4")然后设置到js里面
var incoid1 = "";
var incoid2 = "";
var incoid3 = "";
var incoid4 = "";
function setValue(id1,id2,id3,id4) {
incoid1 = id1;
incoid2 = id2;
incoid3 = id3;
incoid4 = id4;
}


这样js全局就可以用这些值了


19.地址栏中出现汉字的情况有两种
一种是汉字出现在URL的路径部分,一种是汉字出现在URL的传参的部分,第二种情况的时候必须采用编码后传参,接受时解码的方式完成传参。js中编码有escape(),encodeURI(),encodeURIComponent()三个常用的方法


escape()常常用在提交页面和处理页面的编码格式相同的情况下(比如它们都是GB2312),encodeURI()和encodeURIComponent()的用法基本相同,区别在于encodeURIComponent()也对"?"等特殊字符进行编码。


一开始遇到中文参数的时候,使用encodeURI()进行了一遍编码,传过去后,发现解码出现问题,于是想到可能是编码方法使用错误,于是使用escape()方法,这时发现解码时抛出isHexDigit异常。借助百度搜索isHexDigit异常,
发现原来,是escape()方法造成了异常,同时了解了浏览器传递地址的一些原理,在浏览器地址栏里,浏览器认为%是个转义字符,浏览器会把%与%之间的编码,两位两位取出后进行解码,然后再传递给处理页面,
然后由处理页面进行再次解码。由此我想到一直使用encodeURI方法是正确的,只是需要使用两次encodeURI方法,例如encodeURI(encodeURI("中文"));第一次是把中文编码成%xy的格式,
第二次是对%xy中的%进行编码,%编码成%25。整个传参过程大体应该是:提交页面使用encodeURI(encodeURI("中文"))编码,把最后的编码结果%25xy传递给处理页面的过程中,浏览器获取URL地址
(注意openModelDialog方法,浏览器获取不到参数编码)后解码成%xy,然后把%xy传递给处理页面,处理页面使用URLDecoder.decode(request.getParameter("参数名"),"UTF-8");完成解码。
总结:
1、汉字出现在URL路径部分的时候不需要编码解码;
2、使用encodeURI进行2次编码;
3、在openModelDialog()打开的模式窗体里没办法用request.getParameter正确获取参数;


客户端和服务器在传递数据时可以用过滤器filter解决字符编码问题,但filter只能解决post方式提交的数据。对于get方式,可以使用两次encodeURI(encodeURI(“中文”))并在服务器中使用URLDecoder.decode(“中文”, "UTF-8");
今天用Ajax校验数据时也遇到这个问题,尽管页面、类和web容器都统一了字符编码,提交的数据依然是乱码,所以就采用了2次encodeURI()编码方式,乱码问题就解决了。
页面
var name=document.myForm.username.value;
var url="Ajax.do?method=check&name="+encodeURI(encodeURI(name));
xmlHttp.open("GET",url,true);
action中
String name = request.getParameter("name");
name = URLDecoder.decode(name, "UTF-8");
servlet返回数据时,将字符编码设置为utf-8就可以了,因为Ajax只支持utf-8
response.setContentType("text/xml;charset=utf-8");
PrintWriter out = response.getWriter();
out.print(result);




20.-- 查出信心督察处,启动的年度重点工作流程
SELECT r.* from t_target_order_rel r,wf_hist_order h where r.mid in(
SELECT t.mid from t_target_main t where t.imp_flag='3' and t.co_organizer_name !='')
and r.flow_flag is NULL and r.s_createtime<'2016-04-10 00:00:00' and r.s_orgid='100500010008'
and h.id=r.order_id and (h.creator='dongss' or h.creator='piyj') and (h.variable like '%"wf_actor":"dongss"%' or h.variable like '%"wf_actor":"piyj"%')
;
/** 修改流程阶段为发起阶段就OK了
UPDATE t_target_order_rel rr set rr.flow_flag='01' WHERE rr.relid in (
SELECT r.relid from t_target_order_rel r,wf_hist_order h where r.mid in(
SELECT t.mid from t_target_main t where t.imp_flag='3' and t.co_organizer_name !='')
and r.flow_flag is NULL and r.s_createtime<'2016-04-10 00:00:00' and r.s_orgid='100500010008'
and h.id=r.order_id and (h.creator='dongss' or h.creator='piyj') and (h.variable like '%"wf_actor":"dongss"%' or h.variable like '%"wf_actor":"piyj"%')
)**/


SELECT t.* from t_target_main t where t.imp_flag='3' and t.co_organizer_name !=''


21.--业务逻辑 按照两个字段排序  当一个字段相等时按照另一个字段排序Collections.sort()方法排序
private static void sort(List<HashMap<String, Object>> data) {
Collections.sort(data, new Comparator<HashMap<String, Object>>() {
@Override
public int compare(HashMap<String, Object> o1, HashMap<String, Object> o2) {
//下面代码是从大到小
if(new Double(String.valueOf(o2.get("standardRateAndtimelyFeedback"))).compareTo(new Double(String.valueOf(o1.get("standardRateAndtimelyFeedback"))))==0){
return new Double(String.valueOf(o2.get("zongshu"))).compareTo(new Double(String.valueOf(o1.get("zongshu")))); 
}
else{  
return new Double(String.valueOf(o2.get("standardRateAndtimelyFeedback"))).compareTo(new Double(String.valueOf(o1.get("standardRateAndtimelyFeedback")))); 
        }
//下面代码是从小到大
/*if(new Double(String.valueOf(o1.get("standardRateAndtimelyFeedback"))).compareTo(new Double(String.valueOf(o2.get("standardRateAndtimelyFeedback"))))==0){
return new Double(String.valueOf(o1.get("zongshu"))).compareTo(new Double(String.valueOf(o2.get("zongshu")))); 
}
else{  
return new Double(String.valueOf(o1.get("standardRateAndtimelyFeedback"))).compareTo(new Double(String.valueOf(o2.get("standardRateAndtimelyFeedback")))); 
        } */
}
});
    }
22.--统计数据当一个SQL语句 ,解决不了时,可以写两个SQL语句查询出来,然后在业务逻辑解决 、排序啊 ,计算啊等等


HashMap<String, Object> map = new HashMap<String, Object>();
List<HashMap<String, Object>> list = leaderDao.getMatterScoreAndCount(parent_org_id, event_class, new Pub().getCurrentServerYear()+"");
List<HashMap<String, Object>> listp = leaderDao.getMatterProgressScore(parent_org_id, event_class, new Pub().getCurrentServerYear()+"");
for (int i = 0; i < list.size(); i++) {//standardRate达标率   timelyFeedback及时反馈率
HashMap<String, Object> mapTemp = list.get(i);
String timelyFeedback="100";
double standardRate=0;
for (int j = 0; j < listp.size(); j++) {
HashMap<String, Object> mapTemp2 = listp.get(j);
if(mapTemp.get("orgName").equals(mapTemp2.get("orgName"))){
double total_count = Double.parseDouble((String.valueOf(mapTemp.get("zongshu"))));
double jishi_count = total_count-Double.parseDouble(String.valueOf(mapTemp2.get("num")));
double u=(jishi_count/total_count)*100;
BigDecimal bg = new BigDecimal(u);  
           double f = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();  
            timelyFeedback = String.valueOf(f);
}
standardRate = Double.parseDouble(String.valueOf(mapTemp.get("standardRate")));
}
mapTemp.put("timelyFeedback", timelyFeedback);
double standardRateAndtimelyFeedback=standardRate+Double.parseDouble((String.valueOf(timelyFeedback)));
mapTemp.put("standardRateAndtimelyFeedback", standardRateAndtimelyFeedback);
}
//mySort(list);// 交换排序->冒泡排序  按照完成率和及时反馈率之和排序
sort(list);//排序 完成率和及时反馈率之和相等时,则按照已考核节点总是排序;否则按照完成率和及时反馈率之和排序  
if(list != null && list.size() > 0){
StringBuffer orgName = new StringBuffer();
StringBuffer standardRate = new StringBuffer();
StringBuffer timelyFeedback = new StringBuffer();
for (int i = 0; i < list.size(); i++) {
HashMap<String, Object> mapTemp = list.get(i);
String orgNameStr = StringUtils.trimToEmpty((String)mapTemp.get("orgName"));
String standardRateStr = new BigDecimal(String.valueOf(mapTemp.get("standardRate"))).toString();
String timelyFeedbackStr = StringUtils.trimToEmpty(mapTemp.get("timelyFeedback") == null ? "0":mapTemp.get("timelyFeedback") + "");
if(i == list.size() - 1){
orgName.append(orgNameStr);
standardRate.append("".equals(standardRateStr) ? "0" : standardRateStr);
timelyFeedback.append("".equals(timelyFeedbackStr) ? "0" : timelyFeedbackStr);
}else{
orgName.append(orgNameStr+",");
standardRate.append(("".equals(standardRateStr) ? "0" : standardRateStr)+",");
timelyFeedback.append(("".equals(timelyFeedbackStr) ? "0" : timelyFeedbackStr)+",");
}
}
map.put("orgName", orgName.toString());
map.put("standardRate", standardRate.toString());
map.put("timelyFeedback", timelyFeedback.toString());
}
return map;


23.--字符串拼接使用方法
Target target = new Target();
target.setMid(bean.getMid());
target.setPartion_code(bean.getPartion_code());
StringBuffer sb = new StringBuffer("");
List<TargetBean> list = targetDAO.getTargetidsByMid(target);
if(null != list && !list.isEmpty()){
for(int i=0; i<list.size(); i++){
String targetid = list.get(i).getTargetid();
if(!"".equals(targetid)){
sb.append(targetid);
sb.append(",");
}
}
}
if(sb.length()==0){
return "";
}else{
return sb.substring(0, sb.length()-1).toString();//最后多了一个逗号,所以你通过截取字符串方法去掉最后一个逗号,达到你的目标

}

转载请注明: 除非注明,www.ifx666.cn爱分享666 此文章为原创,转载请以链接形式标明本文地址

上一篇: springboot视频【尚硅谷springboot】_(下)整合篇_压缩版_java视频教程

下一篇: 没有了

评论

评论列表