EasyUI combotree textField显示问题解决方法

之前在使用EasyUI combotree时候发现了一个很奇怪的问题,就是我设置了textField却显示undefined,如下图: 这是请求数据: 这是代码: 这是显示结果: 后来查看了下EasyUI的官方文档(https://www.jeasyui.com/documentation/index.php),发现textField在1.5.2版本及之后才有的,但是我是最新版却还是不行,因为textField的作用是在选择某项后才显示的。 那么肿么解决name的显示呢? 我在文档中发现combotree依赖于combo和tree两个组件,那我就找找这两个组件下有什么解决思路,于是我发现tree下有个方法loadFilter,解决思路有了。 代码如下:

1
2
3
4
5
6
7
8
9
10
11
loadFilter: function (items) {
if(items!==undefined){
ret = [];
console.log(items);
$.each(items, function (i, e) {
e.text=e.name;
ret.push(e);
});
}
return ret;
}

最终解决了问题:

MySQL 数据库表创建及数据填充的cmd脚本(bat批处理),提高数据库设计效率

大家在开发Web程序时肯定遇到过设计数据库表结构和数据填充的情况,有些是中小型企业级程序数据库结构设计更加复杂,当然我也遇到过此类烦恼,所以顺手写了几个脚本文件提高效率。 数据库表结构脚本(migrate.cmd)运行代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
chcp 65001

@REM Author:[email protected]
@REM Description:MYSQL数据库迁移脚本
@REM Platform:Windows

@echo off

set "MYSQL_HOME=D:\dev\mysql\mysql5.7.14"
set "HOST=localhost"
set "PORT=3306"
set "USER=testuser"
set "PASSWORD=testpwd"
set "DATABASE=testdb"
set "TABLES=D:\dev\testdb\tables"
set "EXEC=%MYSQL_HOME%\bin\mysql.exe -h%HOST% -P%PORT% -u%USER% -p%PASSWORD% -D%DATABASE%<%TABLES%"

%EXEC%\deleteTables.sql
%EXEC%\1_ict_logs_table.sql
echo finished.

复制以上代码到文件名为migrate.cmd的文件中,然后根据自己需求修改 MYSQL_HOME、HOST、PORT、USER、PASSWORD、TABLES等变量的值即可。 github gist:https://gist.github.com/godcheese/0b77450a167dbe5a354af93c048338c4 数据库数据填充脚本(dbseed.cmd)运行代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
chcp 65001

@REM Author:[email protected]
@REM Description:MYSQL数据库填充脚本
@REM Platform:Windows

@echo off

set "MYSQL_HOME=D:\dev\mysql\mysql5.7.14"
set "HOST=localhost"
set "PORT=3306"
set "USER=testuser"
set "PASSWORD=testpwd"
set "DATABASE=testdb"
set "DATA=D:\dev\testdb\data"
set "EXEC=%MYSQL_HOME%\bin\mysql.exe -h%HOST% -P%PORT% -u%USER% -p%PASSWORD% -D%DATABASE%<%DATA%"

%EXEC%\1_ict_logs_data.sql
%EXEC%\2_ict_areas_data.sql
echo finished.

复制以上代码到文件名为dbseed.cmd的文件中,然后根据自己需求修改 MYSQL_HOME、HOST、PORT、USER、PASSWORD、DATA等变量的值即可。 github gist:https://gist.github.com/godcheese/2be10fd8ceecda2ea8d9f89e73d2e942

Java下载文件及解决Java下载中文文件名文件时不正常问题

最近在开发一个管理系统,涉及到文件的上下载问题,但是我发现Java中文或者说对编码比较敏感(以前用PHP没感觉到),然后我在写一个上下载功能时就发现问题比较明显,下载英文然后无空格的文件下载完全正常,但是当下载含有中文文件名的文件时发现下载的文件名并为更名,一开始我以为是Header 中 Content-Disposition 未设置正确导致的,但是后来发现并不是,于是网上搜索了相关资料,的确存在对中文文件名支持不友好的情况,然后整理了相关资料,引用到了自己的代码里,请看下面这段代码,就是正确解决了这个问题,特别请看注释。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
if(file.exists()){

// 设置文件流
httpServletResponse.setContentType("application/octet-stream");

// 为防止中文文件名的乱码显示
//filename =new String(filename.getBytes("ISO8859-1"),"UTF-8");

// 编码文件名
filename = URLEncoder.encode(filename,"UTF-8");

// 编码后文件名中的空格被替换为“+”号,所以此处将替换编码后文件名中“+”号为UTF-8中空格的“%20”编码
filename = filename.replaceAll("\+","%20");

// 设置下载文件内容长度
httpServletResponse.setContentLengthLong(file.length());

// 设置文件名
httpServletResponse.setHeader("Content-Disposition", String.format("attachment; filename=\"%s\"",filename));

System.out.println(httpServletResponse.getHeader("Content-Disposition"));

byte[] bytes = new byte[1024];

FileInputStream fileInputStream =null;
BufferedInputStream bufferedInputStream = null;
OutputStream outputStream = null;

try {
fileInputStream = new FileInputStream(file);
bufferedInputStream = new BufferedInputStream(fileInputStream);
outputStream = httpServletResponse.getOutputStream();

Integer len = 0;
while((len=fileInputStream.read(bytes))>0){
outputStream.write(bytes,0,len);
}

// 成功下载文件


} catch (Exception e) {
e.printStackTrace();
}finally {

if(fileInputStream!=null){
try {
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}

if(bufferedInputStream!=null){
try {
bufferedInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}

if(outputStream!=null){
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

java2sql 让数据库构建更简单,java代码书写生成sql语句并迁移填充数据到数据库

java2sql 是一款基于java代码开发的数据库命令行构建工具。通过简单的命令生成和迁移填充数据库数据。 受 Laravel Artisan Migrate/Seeder 功能启发开发而成。 github开源地址:https://github.com/godcheese/java2sql 优点:

  • 利用 java 代码书写,java开发者的自然优越感
  • 用命令行操作,使用更加简单
  • 代码复用率更高

基础组件有Migrate、Seeder等 安装: 使用

1
2
java -jar java2sql migration:UsersMigration
java2sql migration:UsersMigration // 这句必需在系统设置环境变量后才能正常运行

在 migrations 生成如下 *.java 文件,每个文件代表一个数据表迁移,每个文件都有一个public static void main(String[] args) 方法。 Template migration class java 代码实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package com.gioov.java2sql;

import com.gioov.java2sql.adapter.DatabaseAdapter;
import com.gioov.java2sql.adapter.FieldAdapter;
import com.gioov.java2sql.adapter.mysql.MySqlAdapter;
import com.gioov.java2sql.adapter.mysql.MysqlFieldAdapter;
import com.gioov.java2sql.adapter.mysql.MysqlTableAdapter;

/**
* Created by godcheese on 2017/7/16.
*/
public class TemplateMigration {

public static void main(String[] arg){

/**
*
* Init database adapter
* Init table adapter
* Init migration
*
*/

DatabaseAdapter database=new MySqlAdapter();
database.setName("test").setCharacterSet("utf8mb4").setCollate("utf8mb4");
MysqlTableAdapter table =new MysqlTableAdapter();
table.setName("NewTable");
Migration migration =new Migration(database,table);


/**
* Init field adapter and set properties
* Field Name:id
* Field Type:bigint
* Field Length:20
* Filed Primary Key:true
* Filed Auto Increment:true
* Field Null:false
* Field Unsigned:false
*
*/
FieldAdapter idField=new MysqlFieldAdapter().setName("id").setType("bigint").setLength(20).setPrimaryKey(true).setAutoIncrement(true).setIsNull(false).setIsUnsigned(false);

/**
* Init field adapter and set properties
* Field Name:name
* Field Type:varchar
* Field Length:50
* Filed Null:false
*
*/

FieldAdapter nameField=new MysqlFieldAdapter().setName("name").setType("varchar").setLength(50).setIsNull(false);


// Add database table fields
String sql= migration.addField(idField).addField(nameField).execute();

System.out.println(sql);

/**
*
*
* Result Sql: DROP TABLE IF EXISTS `NewTable`;
* CREATE TABLE `NewTable` ( `id` bigint(20) NOT NULL ,
* `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4 NOT NULL ,
* PRIMARY KEY (`id`) )
* ENGINE= InnoDB;
*
*/

}
}

Windows 7 安装 Maven (新手可看,大佬绕行)

Maven 是 Java Web 开发中必备的软件之一,其主要功能就是管理开发中依赖库,类似于node的Node Package Manager 和 PHP 的 composer。好了废话不多说,现在就来仔细操作一遍安装过程,不了解的新手可以看看,大佬可以绕行,因为挺简单的。 Maven 下载地址:http://maven.apache.org/download.cgi 安装前请检查自己的电脑系统是否安装了JDK 1.7及以上(http://www.oracle.com/technetwork/java/index.html) 第一步:先下载 Maven Binary zip archive 第二步:解压 zip 文件 第三步:设置环境 开始菜单=>计算机=>属性=>高级系统设置=>环境变量=>系统变量=>新建名为 M2_HOME 的变量值为之前 Maven 解压文件的地址,如我的为

1
F:\dev\apache-maven-3.5.0

然后在 Path 变量中加入

1
;%M2_HOME%\bin

如下图 然后保存即可。 最后才 cmd 中运行

1
mvn -version

可正常输出 Maven 信息则代表安装并运行成功。

几句代码实现的 git push 代码提交到远程自动化 bash 脚本

自己的很多项目都已经用上了git项目版本管理工具,但是每次更改代码或者某些重要更新时会频繁将本地项目代码push到远程服务器master主分支上,每次都需要打开命令行工具敲入 :

1
2
3
4
5
git add .

git commit -m xxx

git push origin master

这样重复的动作,总合起来其实也浪费时间,而且效率低,于是自己写了个简单的提交脚本来完成。

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/env bash
# Linux platform bash file
echo "正在添加文件..."
git add .
echo -n "正在提交备注...,请填写备注(可空):"
read remarks
if [ ! -n "$remarks" ];then
remarks="常规提交"
fi
git commit -m "$remarks"
echo "正在开始提交代码..."
git push origin master
echo "代码提交成功,正在关闭..."

Gist(或需科学上网):https://gist.github.com/godcheese/2c4ab58fc03674fd0ce523701cd88075 将其拷贝并命名成 git-push.sh ,然后打开终端或命令行工具,输入

1
bash git-push.sh

写入一段脚本就可实现,它会提示你本次提交是否写入备注信息,不写则默认备注为“常规提交”。 更多git相关知识:https://www.godcheese.com/index.php/379

Laravel 数据迁移 migrate 的常见问题(操作)总结

外键约束添加错误

[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table
users add constraint users_role_id_foreign foreign key (role_id) references role s (id) on delete cascade on update cascade)
[PDOException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint

解决方案

1. 将欲添加外键约束的数据表 migration 文件放在参考表 migration 之后(通过文件重命名方式),如下, 并在命令行运行(此项操作很重要)

1
composer dump-autoload

刷新 autoload-classmap 2. 需确认添加外键约束的字段与参考字段其字段属性必须相同,如下:

1
2
// 外键约束
$table->foreign('role_id')->references('id')->on('roles')->onUpdate('cascade')->onDelete('cascade');

这句代码代码的欲添加外键约束的表是 users ,表字段是 role_id ;参考表是 roles ,参考字段是 roles 的 id 。

修改数据表默认存储引擎

在 migration 文件内添加一句代码来指定数据库引擎(将存储引擎改成InnoDB,支持事务处理):

1
$table->engine=’InnoDB’;

安装并使用 Laravel Passport 来请求授权令牌(OAuth2.0认证方式)

一、 安装 Passport

使用 Composer 依赖包管理器安装 Passport

1
composer require laravel/passport

接下来将

1
Laravel\Passport\PassportServiceProvider::class

这句代码添加到 config/app.php 的 providers 数组, 然后运行

1
php artisan migrate

来运行 Passport 自带的数据库迁移文件(用于自动创建 Passport 必需的客户端数据表和令牌数据表), 然后运行

1
php artisan passport:install

来创建生成安全访问令牌时用到的加密密钥及私人访问和密码访问客户端。 接下来再将

1
Laravel\Passport\HasApiTokens

Trait 添加到 App\User 模型中,这个 Trait 会给这个模型提供一些辅助函数,用于检查已认证用户的令牌和使用作用于。 然后在 AuthServiceProvider 的 boot 方法中添加

1
Passport::roues();

来注册 Passport 在访问令牌、客户端、私人访问令牌的发放和吊销过程中一些必要路由。 最后修改下配置文件 config/auth.php 中的 api driver 改为 passport,此项操作会将 API 请求时使用 Passport 的TokenGuard 来处理授权保护。 全部配置好后,我们来请求令牌,但是发现我们并没有创建任何用户,于是我们需要用到seed来预设填充数据。 运行

1
php artisan make:seeder UsersTableSeeder

创建一个 Seeder 然后打开 database\seeds 文件夹里已经新建了一个叫 UserTableSeeder.php 的文件,打开它然后在 run 方法内输入以下代码:

1
2
3
4
5
DB::table('users')->insert([
'name'=>'admin',
'email'=>'[email protected]',
'password'=>bcrypt('admin')
]);

如图所示, 然后运行

1
php artisan db:seed –class=UsersTableSeeder

来往 user 表中填充刚刚添加好的 seed 数据。 接下来我们来写前端 JavaScript 请求获取用户访问令牌的例子。

二、JavaScript 请求授权令牌

这是前端 UI, 然后些下JavaScript请求代码如下(此处仅供演示,暂时忽略安全问题。实际生产环境中不建议在前端显示 client_id 和 client_secret):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$('#loginButton').click(function(event){
event.preventDefault();
$.ajax({
type:'post',
url:'http://wodedaxue-backend/oauth/token',
dataType:'json',
data:{
'grant_type':'password',
'client_id':'2',
'client_secret':'o6N7JzK2y3pbJiQmDcHaDhrpvPHBktnAlmmfEnS7',
'username':$('#username').val(),
'password':$('#password').val(),
'scope':''
},
success:function(data){
console.log(data);
alert(JSON.stringify(data));
},
error:function(err){
console.log(err);
alert('statusCode:'+err.status+'\n'+'statusText:'+err.statusText+'\n'+'description:\n'+JSON.stringify(err.responseJSON));
}
});
});

接下来再将以下代码写入 User 模型:

1
2
3
4
5
6
7
8
9
/**
* 自定义用Passport授权登录:用户名+密码
* @param $username
* @return mixed
*/
public function findForPassport($username)
{
return self::where('name', $username)->first();
}

然后输入用户名 admin 和密码 admin ,点击登录按钮尝试登录:

1
2
3
4
5
6
{
token_type:"Bearer",
expires_in:31536000,
access_token:"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImNiOG…MFF7PYRIhXqCkZhZNfoLV1IYTzRmhO2oV41XR9wD7Zd3Oxl-g",
refresh_token:"sabtS2jYhqAJtVxe868OpTTgBeYgpWgfttn5h97drUgBVLN7vL…ukx7yGfGhn5h+zCouLmuh0sdjYU+dgtRweXU3jiA0Fa6/c6k="
}

成功获取访问令牌(access_token)。 然后在每次访问其它 API 时候都带上此参数。 Laravel Passport 更多参考资料:https://laravel.com/docs/5.4/passport

WampServer 3.0 所需运行库下载及安装说明

最新版本依赖编译于 VC9(Microsoft Visual C++ 2008)、VC10(Microsoft Visual C++ 2010),VC11(Microsoft Visual C++ 2012)以及 PHP7 依赖编译的 VC14(Microsoft Visual C++ 2015),所我们得确保所有 Microsoft Visual C++ 运行库都已安装至最新版。 请确认 VC9**、**VC10**、**VC11**、**VC13**、**VC14 发行版运行库都已更新至最新,即使你觉得已经是最新版了,也应该重新安装一次所有的运行库(以管理员身份运行),当出现信息“已安装”,修复等信息表明已经成功安装。 VC9 运行库

  • 支持 Windows 2000 Service Pack 4/Windows Server 2003/ Windows Server 2008/ Windows Vista/Windows XP/Windows 7/Windows 8
  • Microsoft Visual C++ 2008 SP1 Redistributable Package (x86)
  • Microsoft Visual C++ 2008 SP1 Redistributable Package (x64)

VC10 运行库

  • 支持 Windows 7、Windows Server 2003、Windows Server 2008、Windows Server 2008 R2、Windows Vista、Windows XP
  • Microsoft Visual C++ 2010 SP1 Redistributable Package (x86)
  • Microsoft Visual C++ 2010 SP1 Redistributable Package (x64)

VC11 运行库 备注: VC11 不支持 Windows XP

  • 支持 Windows 7 Service Pack 1/Windows 8/Windows Server 2008 R2 SP1/Windows Server 2012/Windows Vista Service Pack 2
  • Visual C++ Redistributable for Visual Studio 2012 Update 4 (x86)
  • Visual C++ Redistributable for Visual Studio 2012 Update 4 (x64)

VC13 运行库

  • 支持 Windows 7 Service Pack 1/Windows 8/Windows Server 2008 R2 SP1/Windows Server 2012/Windows Vista Service Pack 2
  • Apache 2.4.17 和 PHP7 必装
  • Visual C++ Redistributable for Visual Studio 2013 (x86)
  • Visual C++ Redistributable for Visual Studio 2013 (x64)

VC14 运行库

  • 支持 Windows 7 Service Pack 1/Windows 8/Windows Server 2008 R2 SP1/Windows Server 2012/Windows Vista Service Pack 2
  • Apache 2.4.17 和 PHP7 必装
  • Visual C++ Redistributable for Visual Studio 2015 Update 3 (x86)
  • Visual C++ Redistributable for Visual Studio 2015 Update 3 (x64)

如果你是**64** Windows 系统,你必需安装所有**32**位和**64**位两个版本的运行库,即使你不用**64**位的 Wampserver 请按照 VC9、VC10、VC11、VC13、VC14 排列顺序依次安装,务必在 Wampserver 之前安装这些运行库。

下载地址

链接: https://pan.baidu.com/s/1WuZ0VdCGiM3odDJoZ1jxWg 密码: 6qcf

会声会影 X10/X9/X8/X7/5 下载地址+Patch(仅供学习)

软件名称:会声会影 X10/X9/X8/X7/5 软件官网http://www.huishenghuiying.com.cn/ 授权方式:试用(可破解) 软件语言:简体中文 支持系统:Windows 10/8/7 会声会影中文版是一款强大的视频剪辑、制作软件,完美支持 Intel第 7 代核心处理技术,新增的轨道透明度、360°视频支持功能,让用户完成的效果更加多元。重新映射时间则更快更方便的实现速度和方向的控制。功能合并,操作简化,使得无论老幼都可以轻松驾驭这款视频制作软件。

软件截图

下载地址

会声会影X9 64位:http://xiazai.huishenghuiying.com.cn/trails/VideoStudioX9-64bit_YY.exe 会声会影X8 64位:http://dlsw.baidu.com/sw-search-sp/soft/8a/39391/hshyx864w18.0.1.32.1434621315.exe 会声会影X7 64位:http://dlsw.baidu.com/sw-search-sp/soft/c3/26848/VSX7_Pro_x64_Setup.1420534845.exe 更多下载:http://www.huishenghuiying.com.cn/xiazai.html