首页 文章 精选 留言 我的

精选列表

搜索[动态工作流],共10000篇文章
优秀的个人博客,低调大师

ajax异步加载jqgrid之动态创建

之前写过一篇过于ajax异步加载jqgrid的文章,那个只是一个特殊的情况,如果创建不同数据库表的jqgrid,必须分别写servlet,dao层和连接池,很麻烦,今天我写了一个万能的写法,客官只要在前台js中写入表格名称和字段名称即可实现功能! 下面就是代码实例,关于jqgrid,ajax的介绍这里暂时不多说,有不懂的可以参考我之前的文章! 代码实例 JSP层 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>定义>类型</title> <link rel="stylesheet" href="css/homepage.css"> <link type="text/css" rel="stylesheet" href="css/bootstrap.min.css"> <link type="text/css" rel="stylesheet" href="js/JqGrid/css/font-awesome.min.css"> <link type="text/css" rel="stylesheet" href="js/JqGrid/css/ui.jqgrid.css"> <link type="text/css" rel="stylesheet" href="js/JqGrid/css/jquery-ui.min.css"> </head> <body> <div class="headerColor"> <span>定义>类型</span> </div> <div class="row col-sm-12"> <div class="frame_border"> <div class="titleColor"> <span>已定义模拟量测点信息</span> <div id="typeDefines"> <table id="typeDefine"></table> <div id="typeDefinePager"></div> </div> </div> </div> </div> <script type="text/javascript" src="js/JqGrid/js/jquery.min.js"></script> <script type="text/javascript" src="js/JqGrid/js/jquery.jqGrid.min.js"></script> <script type="text/javascript" src="js/JqGrid/js/bootstrap.min.js"></script> <script type="text/javascript" src="js/JqGrid/js/grid.locale-en.js"></script> <script type="text/javascript" src="js/JqGrid/js/grid.locale-cn.js"></script> <script type="text/javascript" src="js/JqGrid/js/jquery.jqgrid.typedefine.js"></script> <script type="text/javascript"> jf_initJqgrid(); function jf_initJqgrid(){ $("#typeDefine").jqGridTypeDefine({ pager_selector:"#typeDefinePager",//分页 height:"360",//表格高度 width:$("#typeDefines"),//表格宽度 where:{},//初始化查询条件 wherestring:{}, oper:"jqGridCre", tableid : "kj_typedefine", }); } </script> </body> </html> JavaScript篇 ;(function($){ $.fn.jqGridTypeDefine = function(options){ //获取jquery对象 var grid_selector = this; var initDate = "{oper: ""," + "height: ""," + "width: ""," + "pager_selector: "typeDefinePager"," + "where: ""," + "wherestring: {}," + "fileds: ["id", "property", "name", "sensortype", "unit","highvalue"]," + "table:"kj_typedefine"}"; $.ajax({ url:"MyServlet", async:true, //是否为异步请求 cache:false, //是否缓存结果 type:"GET", dataType:"json", data :{ "data" : initDate, }, success : function(data){ for(var i=0;i<=data.length;i++){ $("#typeDefine").jqGrid('addRowData',i+1,data[i]); } } }) switch(options.oper){ case 'jqGridCre':jqgridCre(initDate,grid_selector); break; case 'jqGridFre':jqGridFre(initDate,grid_selector); break; } $('[id^=jqgh_typeDefine_]').css("height","20px"); } function jqgridCre(initDate,grid_selector) { jQuery(grid_selector).jqGrid({ colNames:['标识符','属性', '名称','传感器种类','单位/0态名称','高值/1态名称'], colModel:[ { name:'id', index:'id', width: 100, },{ name:'property', index:'property', width: 100, },{ name:'name', index:'name', width: 100, },{ name:'sensortype', index:'sensortype', width: 100, },{ name:'unit', index:'unit', width: 100, },{ name:'highvalue', index:'highvalue', width: 100, } ], sortname : "id", sortorder : "desc", viewrecords : true, shrinkToFit : true, width: 1645, height: 500, rowNum : 20, rowList : [ 10,15,30 ], datatype: 'text', pager: "#typeDefinePager", onSelectRow:function(rowid){ grid_selectRow = $(grid_selector).jqGrid("getRowData",rowid); }, }); } })(jQuery); servlet层 package com.test.servlet; import com.test.entity.MyEntity; import com.test.service.MyService; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class MyServlet extends HttpServlet { MyService service = new MyService(); protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{ response.setContentType("text/html"); request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{ response.setContentType("text/html"); request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); String jqgridData = request.getParameter("data"); MyEntity myEntity = new MyEntity(); myEntity.setJqgridData(jqgridData); String str = service.getJqgridData(myEntity); response.getWriter().print(str); } } service层 package com.test.service; import com.test.dao.MyDao; import com.test.entity.MyEntity; public class MyService { MyDao myDao = new MyDao(); public String getJqgridData(MyEntity myEntity) { String jqgridData = myDao.selectJqgridData(myEntity); return jqgridData; } } dao层 package com.test.dao; import com.test.entity.MyEntity; import com.test.entity.SecondData; import com.test.util.MySQLFactory; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; public class MyDao { public String selectJqgridData(MyEntity myEntity) { String str = myEntity.getJqgridData(); String data = ""; try { JSONObject obj = new JSONObject(str); String oper = String.valueOf(obj.get("oper")); String fileds = String.valueOf(obj.get("fileds")).replace(""","") .replace("[","") .replace("]",""); String table = String.valueOf(obj.get("table")); String sql = String.format( "select %s from %s ",fileds,table ); System.out.println(sql); data = MySQLFactory.queryData(sql); } catch (JSONException e) { e.printStackTrace(); } return data; } } entity层 package com.test.entity; public class MyEntity { private String jqgridData; public MyEntity() { } public MyEntity(String jqgridData) { this.jqgridData = jqgridData; } public String getJqgridData() { return jqgridData; } public void setJqgridData(String jqgridData) { this.jqgridData = jqgridData; } } 连接池 package com.test.util; import java.sql.*; public class MySQLFactory { static final String DRVIER = "com.mysql.jdbc.Driver"; static final String URL = "jdbc:mysql://localhost:3306/mysql"; static final String USERNAMR = "root"; static final String PASSWORD = "root"; private static Connection conn = null; public static Connection getConnection(){ try { Class.forName(DRVIER); conn = DriverManager.getConnection(URL, USERNAMR, PASSWORD); System.out.println("成功连接数据库"); } catch (ClassNotFoundException e) { throw new RuntimeException("class not find !", e); } catch (SQLException e) { throw new RuntimeException("get connection error!", e); } return conn; } public static void executeSQL(String sql) { Statement stat = null; try { conn = getConnection(); stat = conn.createStatement(); } catch (Exception e) { e.printStackTrace(); return; } try { stat.execute(sql); } catch (Exception e) { e.printStackTrace(); return; } try { if (stat != null) stat.close(); if (conn != null) conn.close(); } catch (Exception e) { e.printStackTrace(); } } public static String queryNoPage(String sql) { Connection conn = null; Statement stat = null; ResultSet rows = null; StringBuffer buff = new StringBuffer(); try { conn = getConnection(); stat = conn.createStatement(); } catch (Exception e) { e.printStackTrace(); return "[]"; } try { rows = stat.executeQuery(sql); //得到数据集的列数 ResultSetMetaData rsmd = rows.getMetaData(); int colCount = rsmd.getColumnCount(); boolean first = true; buff.append("["); while (rows.next()) { String rowStr = ""; for (int i = 1; i <= colCount; i ++ ) { if (i>1) rowStr += ","; String tempValue = rows.getString(i); rowStr += String.format("%s", tempValue); } rowStr = String.format(""%s"", rowStr); if (first) first = false; else buff.append(","); buff.append(rowStr); } buff.append("]"); }catch (Exception e) { e.printStackTrace(); return "[]"; }finally { try { rows.close(); stat.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } return buff.toString(); } public static String queryData(String sql){ Connection conn = null; Statement stat = null; ResultSet rows = null; StringBuffer buff = new StringBuffer(); try { conn = getConnection(); stat = conn.createStatement(); } catch (Exception e) { e.printStackTrace(); return "[]"; } try { rows = stat.executeQuery(sql); //得到数据集的列数 ResultSetMetaData rsmd = rows.getMetaData(); int colCount = rsmd.getColumnCount(); buff.append("["); while (rows.next()) { String rowStr = ""; buff.append("{"); for (int i = 1; i <= colCount; i ++ ) { if (i>1) rowStr += ","; String name = rsmd.getColumnName(i); String tempValue = rows.getString(i); rowStr += String.format(""%s":"%s"", name,tempValue); } rowStr = String.format("%s", rowStr); buff.append(rowStr); buff.append("},"); } buff.append("]"); } catch (SQLException e) { e.printStackTrace(); return "[]"; } String str = buff.toString().replace(",]","]"); return str; } } 效果展示

优秀的个人博客,低调大师

python-利用豆瓣爬虫发个动态

目前总的来说是失败了。原因可能是因为豆瓣验证码的问题,因为我看不到登录时候的界面,所以没法分析验证码的链接。(我用自己的浏览器登录都是默认不要验证码的,这就尴尬了),所以登录不上,后面的post也就没有意义了。把代码贴出来。 # -*- coding: utf-8 -*- """ Created on Sat Jan 6 14:45:40 2018 @author: xglc """ import requests import time session = requests.session() #创建request对象 def _login(iddata): url = 'https://www.douban.com/accounts/login' login_header = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36', 'Origin':'https://www.douban.com/accounts/login', } session.headers.update(login_header) session.post(url,data=iddata,headers=session.headers) #_login() #print(session.headers.items) def _saysth(say_data): url = 'https://www.douban.com/' add_headers = {'Cache-Control':'max-age=0', 'Content-Length':'20', 'Content-Type':'application/x-www-form-urlencoded' } session.headers.update(add_headers) session.post(url,data=say_data,headers=session.headers) if __name__ == '__main__': iddata = {'form_mail':'账号', 'form_password':'密码', 'redir':'https://www.douban.com', 'login':'登录', } _login(iddata) print ('_login') # print (session.headers.items) for i in range(5): print(5-i) time.sleep(1) say_data = {'ck':'OJop', 'comment':'vict', } _saysth(say_data) print('完成!') View Code 也不打算继续扣了,因为用的是自己平时用的账号,post 太多豆瓣别把我给封了?如果继续扣的话,大概方向有两点: 找出豆瓣验证码的链接(我手动登录完全看不到验证码,这是我的常用电脑,所以无法分析) 完善update一下headers的内容,那里还有一些需要修改的项。 这几天淮南雪都开始化了,零下5度,made,空调还给我偶尔出冷风,需要赶紧上班去办公室温暖一下。 手动分析豆瓣js查看: Python-关于豆瓣发布“说句话”,添加网页等的js行为分析

优秀的个人博客,低调大师

Android动态刷新listview中的数据

之前一直困扰listview刷新后位置的问题,现在才明白,原来不能重新设置listview的adapter,而应该用notifyDataSetChanged()来刷新,这样位置就不会置顶。 下面做了一个测试的例子,点击最后一条记录,会增加一条新的记录, 代码如下: 1.TestAdapter package com.TestAdapter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AbsListView.OnScrollListener; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.AbsListView; import android.widget.ImageView; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; import android.widget.Toast; public class TestAdapter extends Activity { /** Called when the activity is first created. */ private int[] images ; private ListView listview; private MyAdapter adapter; List<Map<String,Integer>> al; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); images = new int[]{android.R.drawable.ic_btn_speak_now, android.R.drawable.alert_light_frame, android.R.drawable.arrow_down_float, android.R.drawable.arrow_up_float, android.R.drawable.btn_star_big_off, android.R.drawable.btn_star_big_on, android.R.drawable.button_onoff_indicator_off, android.R.drawable.button_onoff_indicator_on, android.R.drawable.checkbox_off_background, android.R.drawable.checkbox_on_background, android.R.drawable.ic_btn_speak_now, android.R.drawable.ic_delete}; listview = (ListView)findViewById(R.id.listview); al = new ArrayList<Map<String,Integer>>(); for(int i=0; i<12; i++){ HashMap<String,Integer > map = new HashMap<String,Integer>(); map.put(""+i, images[i]); al.add(map); } adapter = new MyAdapter(this, al, R.layout.list_item, new String[]{"imageview", "tv"}, new int[]{R.id.imageview, R.id.tv}); listview.setAdapter(adapter); listview.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View arg1, int count, long arg3) { if(adapter.getCount()==count+1){ HashMap<String ,Integer> map = new HashMap<String, Integer>(); map.put(""+(adapter.mItemList.size()), android.R.drawable.ic_dialog_email); al.add(map); adapter.mItemList = al; adapter.notifyDataSetChanged(); Toast.makeText(TestAdapter.this, "正在刷新", Toast.LENGTH_SHORT).show(); } } }); } private class MyAdapter extends SimpleAdapter{ int count = 0; private List<Map<String, Integer>> mItemList; public MyAdapter(Context context, List<? extends Map<String, Integer>> data, int resource, String[] from, int[] to) { super(context, data, resource, from, to); mItemList = (List<Map<String, Integer>>) data; if(data == null){ count = 0; }else{ count = data.size(); } } public int getCount() { return mItemList.size(); } public Object getItem(int pos) { return pos; } public long getItemId(int pos) { return pos; } @Override public View getView(int position, View convertView, ViewGroup parent) { Map<String ,Integer> map = mItemList.get(position); int image = map.get(""+position); View view = super.getView(position, convertView, parent); ImageView imageview = (ImageView)view.findViewById(R.id.imageview); TextView tv = (TextView)view.findViewById(R.id.tv); imageview.setBackgroundResource(image); tv.setText(""+position); return view; } } } 2.main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="wrap_content" ></ListView> </LinearLayout> 3.list_item.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/imageview" android:layout_width="wrap_content" android:layout_height="wrap_content"> </ImageView> <TextView android:id="@+id/tv" android:layout_width="fill_parent" android:layout_height="wrap_content" ></TextView> </LinearLayout> 本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/wws5201985/786470,如需转载请自行联系原作者

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册