51、json
好多种
JsonArray fromObject = JSONArray.fromObject(list<obj>);
String string = fromObject.toString();
Gson gson = new Gson();
String json = gson.toJson(list<obj>);
52、调用API
//参数url化
String city = java.net.URLEncoder.encode("北京", "utf-8");
//拼地址
String apiUrl = String.format("https://www.sojson.com/open/api/weather/json.shtml?city=%s",city);
//开始请求
URL url= new URL(apiUrl);
URLConnection open = url.openConnection();
InputStream input = open.getInputStream();
//这里转换为String,带上包名,怕你们引错包
String result = org.apache.commons.io.IOUtils.toString(input,"utf-8");
//输出
System.out.println(result);
53、https
Java 信任所有 SSL 证书, HTTPS 请求抛错,忽略证书请求完美解决
方案一:
按照要求,把证书上传到服务器上,具体方法自行百度解决,这里不做叙述。
方案二:
添加下面的代码和工具类,工具类在下面附件中有,直接下载即可。
//省略代码。。。
realUrl = new URL(url);
if("https".equalsIgnoreCase(realUrl.getProtocol())){
SslUtils.ignoreSsl();
}
//省略代码。。。
SslUtils 工具类 代码 实现:
package com.stevezong.utils;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
public class SslUtils {
private static void trustAllHttpsCertificates() throws Exception {
TrustManager[] trustAllCerts = new TrustManager[1];
TrustManager tm = new miTM();
trustAllCerts[0] = tm;
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}
static class miTM implements TrustManager,X509TrustManager {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public boolean isServerTrusted(X509Certificate[] certs) {
return true;
}
public boolean isClientTrusted(X509Certificate[] certs) {
return true;
}
public void checkServerTrusted(X509Certificate[] certs, String authType)
throws CertificateException {
return;
}
public void checkClientTrusted(X509Certificate[] certs, String authType)
throws CertificateException {
return;
}
}
/**
* 忽略HTTPS请求的SSL证书,必须在openConnection之前调用
* @throws Exception
*/
public static void ignoreSsl() throws Exception{
HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
return true;
}
};
trustAllHttpsCertificates();
HttpsURLConnection.setDefaultHostnameVerifier(hv);
}
}
54、 Servlet 监听器
事件源:被监听的对象 ----- 三个域对象 request session servletContext
监听器:监听事件源对象 事件源对象的状态的变化都会触发监听器 ---- 6+2
注册监听器:将监听器与事件源进行绑定
响应行为:监听器监听到事件源的状态变化时 所涉及的功能代码 ---- 程序员编写代码
监听器的编写步骤(重点):
a、编写一个监听器类去实现监听器接口
b、覆盖监听器的方法
c、需要在web.xml中进行配置---注册
ServletContextListener监听器的主要作用
a、初始化的工作:初始化对象 初始化数据 ---- 加载数据库驱动 连接池的初始化
b、加载一些初始化的配置文件 --- spring的配置文件
c、任务调度----定时器----Timer/TimerTask
55、发邮件
package com.stevezong.utils;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
public class MailUtils {
public static void sendMail(String email, String emailMsg)
throws AddressException, MessagingException {
// 1.创建一个程序与邮件服务器会话对象 Session
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "SMTP");
props.setProperty("mail.host", "smtp.126.com");
props.setProperty("mail.smtp.auth", "true");// 指定验证为true
// 创建验证器
Authenticator auth = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("haohao_itcast", "hao12345");
}
};
Session session = Session.getInstance(props, auth);
// 2.创建一个Message,它相当于是邮件内容
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("[email protected]")); // 设置发送者
message.setRecipient(RecipientType.TO, new InternetAddress(email)); // 设置发送方式与接收者
message.setSubject("用户激活");
// message.setText("这是一封激活邮件,请<a href='#'>点击</a>");
message.setContent(emailMsg, "text/html;charset=utf-8");
// 3.创建 Transport用于将邮件发送
Transport.send(message);
}
}
56、定时器
//开启一个定时器
Timer timer = new Timer();
//task :任务 firstTime 第一次运行的事件 period 下次运行的事件 秒
//timer.scheduleAtFixedRate(task, firstTime, period);
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println("开始任务");
}
},new Date(),5000);
57、pagecontext.request.getcontextpath
58、jsp页面 首行报错
在pom.xml文件中加入servlet依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
在工程中添加 tomcat 运行环境
59、mybatis 报错:Invalid bound statement (not found)
检查xml文件所在package名称是否和Mapper interface所在的包名
<mapper namespace="me.tspace.pm.dao.UserDao">
mapper的namespace写的不对!!!注意系修改。
UserDao的方法在UserDao.xml中没有,然后执行UserDao的方法会报此
UserDao的方法返回值是List<User>,而select元素没有正确配置ResultMap,或者只配置ResultType!
如果你确认没有以上问题,请任意修改下对应的xml文件,比如删除一个空行,保存.问题解决
看下mapper的XML配置路径是否正确
60、java.lang.IllegalArgumentException: Name for argument type [java.lang.String]
解决方法:
修改参数的写法,比如修改为
public ModelAndView login(@RequestParam("userName") String userName, @RequestParam("password") String password){
//划水1
//划水n
}
修改编译脚本
SRC=$(find ./java/* | grep java$)
javac -g -d ./classes $SRC -encoding utf-8
增加 -g 参数,即编译时生成所有debug的信息。
参考:https://blog.csdn.net/kouwoo/article/details/42869779
61、jq 选择器
$("input[name='submit']")
input 其中 name属性等于submit的
62、JQuery报错:Uncaught TypeError: Cannot read property 'trim' of undefined
var input = $("#EarningsTypes").val().trim();
var vname = $("#EarningsTypes").val() == undefined ? '' : $("#EarningsTypes").val().trim();
详情参考https://stackoverflow.com/questions/32733423/uncaught-typeerror-cannot-read-property-trim-of-undefined-in-jquery
https://blog.csdn.net/gongjing457/article/details/79001464
63、jq插件 表单校验
导入插件的步骤:
将jquery的原始文件和插件文件jquery.validate.js导入到工程中
编写js代码对表单进行验证
表单验证的格式:
$("form表单的选择器").validate(json数据格式); //键值对 键:值({})
json数据格式:
"{
rules:{
表单项name值:校验规则,
表单项name值:校验规则... ...
},
messages:{
表单项name值:错误提示信息,
表单项name值:错误提示信息... ...
}
}"
$("#myform").validate({
rules:{
"username":{"required":true}
},
messages:{
"username":{"required":"用户名不能为空"}
}
})
其中:校验规则,可以是一个也可以是多个,如果是多个使用json格式
常用校验规则如下:
注意:当错误提示信息不按照我们预想的位置显示时,我们可以按照如下方式进行设置
"自定义错误显示标签放在我们需要显示的位置,当此表单项验证不通过时会将此
信息自动显示出来,jquery验证插件会自动帮助我们控制它的显示与隐藏"
<lable for="html元素name值" class="error" style="display:none">错误信息</lable>
如果设置了错误lable标签就不必在messages中设置此表单项错误提示信息了
如果预定义的校验规则尚不能满足需求的话可以进行自定义校验规则:
自定义校验规则步骤如下:
(1) 使用$.validator.addMethod("校验规则名称",function(value,element,params)){}
(2) 在rules中通过校验规则名称使用校验规则
(3) 在messages中定义该规则对应的错误提示信息
其中: value是校验组件的value值
element是校验组件的节点对象
params是校验规则的参数
1 required:true 必须输入的字段。
2 remote:"check.php" 使用 ajax 方法调用 check.php 验证输入值。
3 email:true 必须输入正确格式的电子邮件。
4 url:true 必须输入正确格式的网址。
5 date:true 必须输入正确格式的日期。日期校验 ie6 出错,慎用。
6 dateISO:true 必须输入正确格式的日期(ISO),例如:2009-06-23,1998/01/22。只验证格式,不验证有效性。
7 number:true 必须输入合法的数字(负数,小数)。
8 digits:true 必须输入整数。
9 creditcard: 必须输入合法的信用卡号。
10 equalTo:"#field" 输入值必须和 #field 相同。
11 accept: 输入拥有合法后缀名的字符串(上传文件的后缀)。
12 maxlength:5 输入长度最多是 5 的字符串(汉字算一个字符)。
13 minlength:10 输入长度最小是 10 的字符串(汉字算一个字符)。
14 rangelength:[5,10] 输入长度必须介于 5 和 10 之间的字符串(汉字算一个字符)。
15 range:[5,10] 输入值必须介于 5 和 10 之间。
16 max:5 输入值不能大于 5。
17 min:10 输入值不能小于 10。
64、gson json String转list
List<Category> all =gson.fromJson(categoryListJson, new TypeToken<List<Category>>() {}.getType());
65、gson list 转String
Gson gson = new Gson();
List<Category> all = categoryDao.findAll();
String str = gson.toJson(all)
66、mybatis
$()和 #() 的区别
$() 会强转为 int
#() 是什么 就是什么
67、gson 解析 复杂的 json str
创建一个 json str 对象的类
先我们需要定义一个序列化的Bean,这里采用内部类的形式,这样比较容易看得清晰些
首先我们需要定义一个序列化的Bean,这里采用内部类的形式,看起来会比较清晰一些:
很多时候大家都是不知道这个Bean是该怎么定义,这里面需要注意几点:
内部嵌套的类必须是static的,要不然解析会出错;
类里面的属性名必须跟Json字段里面的Key是一模一样的;
内部嵌套的用[]括起来的部分是一个List,所以定义为 public List<B> b,而只用{}嵌套的就定义为 public C c,
然后想拿数据就很简单啦,直接在jsonBean里面取就可以了!
如果需要解析的Json嵌套了很多层,同样可以可以定义一个嵌套很多层内部类的Bean,需要细心的对照Json字段来定义哦。
Gson gson = new Gson();
EtouchBean etouch = gson.fromJson(string,EtouchBean.class);
68、Postman
69、yum install bind-utils
dig 域名工具
70、 git ssh 配置
ssh2 home 和 private keys 在同一个目录
C:\Users\Administrator\.ssh\config
============
Host gitlab.com
Hostname altssh.gitlab.com
User git
Port 443
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
=====================
71、 git 拉取maven
https://blog.csdn.net/u014683538/article/details/61196791
https://www.jianshu.com/p/4c601f50aa75
72、eclipse:Project is already imported into workspace
有时候eclipse或者myeclipse导入项目的时候会发生上面这个错误,具体原因是在IDE的workspace中已经存在了相同名字的项目,所以不能导入。
解决方法:修改项目名称,修改.project.文件<name>项目名称</name>
在import projects那个界面把Copy projects into workspace前面的复选框√去掉再Browse,这样就OK了
73、eclipse A .project file already exists in directory
从GitHub上导入项目时突然无法导入,报错如下:
eclipse A .project file already exists in directory
最终解决方案:
从git导入general project后,到工作空间的导入项目目录下找到.project文件并干掉它 然后在eclipse点back,接着点next,导入成功
74、报错not authorized信息
有的朋友改了域用户名和密码,发现在eclipse下无法pull和push分支,报错not authorized信息。
window>preferences>general>security>content>git>delete 即可清除原有密码,再次pull时输入新密码即可。
75、eclipse下git不能拉取错误解决小记
用以下方式加入下边几行字:
Window->Preference->Team->Git->Configuration->Repository Settings->选择你的repository,然后点open
[branch "master"]
remote = origin
merge = refs/heads/master
76、jsp head和foot 引入
https://blog.csdn.net/nrlovestudy/article/details/50032995
77、The current branch is not configured for pull No value for key remote.origin
eclipse 不能拉取
window---preference--team---git--configuration---Repository Settings,Repository选择当前的仓库,然后点右边的open
[core]
repositoryformatversion = 0
filemode = false
logallrefupdates = true
[remote "origin"]
url = 自己项目的git地址
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
78、Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
最近部署项目的时候,由于MIS配置的是Tomcat 8.5的服务端,导致Web应用不正常,报HTTP 400错误(Chrome无异常、IE报错)。问题原因初步判断为8.5版本的服务端接收请求不会对符号进行转义,Chrome不异常的原因或许是浏览器自身转义了。具体错误信息如下:
有两种解决方案:
Plan 1:
更换低版本的Tomcat来规避这种问题。
Plan 2:
在conf/catalina.properties中最后添加一行:
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
重启服务器后,解决问题。
官方指南地址:http://tomcat.apache.org/tomcat-8.5-doc/config/systemprops.html
官方说明:
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH
If this is true ‘%2F’ and ‘%5C’ will be permitted as path.delimiters.If not specified, the default value of false will be used.
79、spring4 搭建 4.2.4
spring-beans
spring-context
spring-core
spring-expression
apache.commons.logging
apache.log4j
位置任意(建议放到src下)
配置文件名任意(建议applicationContext.xml)
80、重置用户名密码
删除C:\Users(用户)\"你的用户名"\AppData\Roaming\Subversion\auth\下的所有文件
81、nginx 查看安装了哪些模块
nginx -V
82、如何解决MySQL在高版本需要指明是否进行SSL连接问题
在mysql连接字符串url中加入ssl=true或者false即可,如下所示。
url=jdbc:mysql://127.0.0.1:3306/framework?characterEncoding=utf8&useSSL=true
83、redis 第一个警告:The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
意思是:TCP backlog设置值,511没有成功,因为 /proc/sys/net/core/somaxconn这个设置的是更小的128.
临时解决方法:(即下次启动还需要修改此值)
echo 511 > /proc/sys/net/core/somaxconn
永久解决方法:(即以后启动还需要修改此值)
将其写入/etc/rc.local文件中。
baklog参数实际控制的是已经3次握手成功的还在accept queue的大小。
参考linux里的backlog详解
84、redis 第二个警告:overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to/etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
意思是:overcommit_memory参数设置为0!在内存不足的情况下,后台程序save可能失败。建议在文件 /etc/sysctl.conf 中将overcommit_memory修改为1。
1. echo "vm.overcommit_memory=1" > /etc/sysctl.conf 或 vi /etcsysctl.conf , 然后reboot重启机器
2. echo 1 > /proc/sys/vm/overcommit_memory 不需要启机器就生效
永久解决方法:将其写入/etc/sysctl.conf文件中。
参考:有关linux下redis overcommit_memory的问题
85、第三个警告:you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix thisissue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain thesetting after a reboot. Redis must be restarted after THP is disabled.
意思是:你使用的是透明大页,可能导致redis延迟和内存使用问题。执行 echo never > /sys/kernel/mm/transparent_hugepage/enabled 修复该问题。
临时解决方法:
echo never > /sys/kernel/mm/transparent_hugepage/enabled。
永久解决方法:
将其写入/etc/rc.local文件中。
86、安装redis 及常见问题
#make
cd src && make all
make[1]: Entering directory `/software/redis-2.8.8/src'
CC adlist.o
In file included from adlist.c:34:
zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
zmalloc.h:55:2: error: #error "Newer version of jemalloc required"
make[1]: *** [adlist.o] Error 1
make[1]: Leaving directory `/software/redis-2.8.8/src'
make: *** [all] Error 2
make MALLOC=libc (不知道为什么这么用?)
# make test
cd src && make test
make[1]: Entering directory `/software/redis-2.8.8/src'
You need tcl 8.5 or newer in order to run the Redis test
make[1]: *** [test] Error 1
make[1]: Leaving directory `/software/redis-2.8.8/src'
make: *** [test] Error 2
A.修改配置文件目录
mkdir /etc/redis
cp redis.conf /etc/redis
87、数据字段
用于枚举项目中的有限的
比如:status 表
88、easyui
屌丝公司 省去美工前端
自带一套页面的样式以及效果
89、maven 使用
apache maven
配置文件 (核心)
settings.xml
依赖
maven jdk -》1.7以上
在系统变量添加
环境变量的名称:MAVEN_HOME
变量值:就是maven软甲解压的目录d:\apache-maven-3.5.2
把MAVEN_HOME添加到path里 %MAVEN_HOME%\bin
验证maven是否配置成功:
打开dos窗口 输入: mvn –v
C:\Users\steve>mvn -v
Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T15:58:1
3+08:00)
Maven home: D:\apache-maven-3.5.2\bin\..
Java version: 1.8.0_111, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jre1.8.0_111
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
90、用struts2.5版本,试了很久,一直报This method: add for action user1 is not allowed!
url:http://localhost:8888/struts2_0200_namespace/user/user1!add.action
这是因为 struts2.5 为了提升安全性,添加了 allomethod 这么个玩意。
解决方法是在配置文件中添加:
<package name="exam" extends="json-default"> <global-allowed-methods>regex:.*</global-allowed-methods> <action name="user" class="userAction"> ... </action> </package>
或者,针对action,在 action 块中添加
<allowed-methods>regex:.*</allowed-methods>
同样也支持在你的 action 上使用 @AllowedMethods 注解
默认的设置为
<global-allowed-methods>execute,input,back,cancel,browse,save,delete,list,index</global-allowed-methods>
全局设置是增量而不是覆盖的,支持正则和直接匹配方法,
源码在这两段
// com.opensymphony.xwork2.DefaultActionProxy#prepare
// com.opensymphony.xwork2.config.entities.ActionConfig#isAllowedMethod
老项目因为爆出漏洞然后我找了一下午这个问题,最终打开研发模式,并搜索官网文档解决。
struts 真是个坑啊。
91、JSP取得绝对路径方法
${pageContext.request.contextPath} <c:set var="cp" value="${pageContext.request.contextPath}" />
将用c:set放入一个变量中,然后在用的时候用EL表达式取出来。
92、BeanFactory not initialized or already closed - call 'refresh' before access
Spring实例化BeanFactory的时候是默认到classPath下面查找名为applicationContext.xml的文件的,但是呢,你又没有指定,所以出现了这个错误。
就是spring 找不到xml文件
93、mybatis Pre-instantiating singletons in org.s[email protected]5811105: defining beans 。。。。 root of factory hierarchy
仔细看 。。。。中的内容
我遇到的是我在映射文件中多了一个其他项目的映射文件 查了好多
94、数据字典
枚举项目中有限个数的字典项
95、mysql的md5
INSERT INTO t_user(id,username,password) values("1","admin",MD5("1234"))
实在懒就是直接用mysql 自带的md5
96、任意元素提交表单
<a onclick="doucment.getElementById('loginform').submit()" id="loginform:j_id19" name="loginform:j_id19"> <a href="javascript:loginform.submit();" id="loginform:j_id19" name="loginform:j_id19">
97、用户登出
@Controller @RequestMapping("/user") public class UserLogoutController { @RequestMapping("/logout.do") public String userLogout(HttpSession session) { session.invalidate(); return "login"; } }
98、 ssm 返回json 时 一直报错:java.lang.IllegalArgumentException: No converter found for return value of t
1.原因:这是因为springmvc默认是没有对象转换成json的转换器的,需要手动添加jackson依赖。
2.解决步骤:
手动添加jackson依赖到pom.xml文件中
<properties> <jackson.version>2.5.4</jackson.version> </properties> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency>
如果还是没有解决,则进行以下步骤
在springmvc配置文件中进行如下配置
<mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.StringHttpMessageConverter"/> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/> </mvc:message-converters> </mvc:annotation-driven>
99、ssm 重定向 即使配置了视图解析器还是可以用的
result = "redirect:../pages_common_index.do";
100、easyui的使用
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>EUI</title> <!-- easyui s --> <link rel="stylesheet" type="text/css" href="../js/easyui/themes/default/easyui.css"> <link rel="stylesheet" type="text/css" href="../js/easyui/themes/icon.css"> <script type="text/javascript" src="../js/jquery-1.8.3.js"></script> <script type="text/javascript" src="../js/easyui/jquery.easyui.min.js"></script> <!-- easyui e --> <!-- ztree s --> <link rel="stylesheet" href="../js/ztree/zTreeStyle.css" type="text/css"> <script type="text/javascript" src="../js/ztree/jquery.ztree.all-3.5.js"></script> <!-- ztree e --> <!-- e --> <script type="text/javascript"> $(function(){ <!--:error,question,info,warning--> <!--消息提示框--> $.messager.alert("标题","内容","error"); <!--消息确认框--> $.messager.confirm("标题","内容",function(r){ alert(r); }); <!--牛皮框--> $.messager.show({ title:'标题', msg:'内容', timeout:5000, showType:'slide' }); }); </script> <!-- s --> </head> <body class="easyui-layout"> <div data-options="region:'north'" style="height: 100px" title="BOS系统"> <a class="easyui-menubutton" data-options="menu:'#mm',iconCls:'icon-help'">控制面板</a> <div id="mm"> <div>修改密码</div> <div>联系管理员</div> <div class="menu-sep"></div> <div onclick="alert(123)">退出系统</div> </div> </div> <div data-options="region:'west'" style="width: 200px" title="系统菜单"> <div class="easyui-accordion" data-options="fit:true"> <div title="1"> <a class="easyui-linkbutton" id="but1"> add tab easy</a> <a class="easyui-linkbutton" id="but2"> add tab iframe</a> <script type="text/javascript"> $(function(){ $("#but1").click(function(){ /* 存在就不在打开新的,而是选中 */ if($("#tabs").tabs("exists","系统操作")){ $("#tabs").tabs("select","系统操作") }else{ $("#tabs").tabs('add',{title:'系统操作',closable:true,content:'内容'}); } }); /* 不管是否存在都一直打开新的 */ $("#but2").click(function(){ $("#tabs").tabs('add',{title:'系统信息',closable:true,content:'<iframe frameborder="0" height="100%" width="100%" src="https://www.baidu.com"></iframe>'}); }); }); </script> </div> <div title="2"> <!-- ztree --> <!-- 标准json数据格式 --> <ul id="ztree" class="ztree"></ul> <script type="text/javascript"> $(function(){ var setting={}; <!-- --> var zNodes=[ {'name':"1","children":[ {'name':"1.1"}, {'name':"1.2"}, {'name':"1.3"} ]}, {'name':"2"}, {'name':"3"} ]; $.fn.zTree.init($("#ztree"),setting,zNodes); }); </script> </div> <div title="3"> <ul id="ztree2" class="ztree"></ul> <!-- 简单json 数据格式 --> <script type="text/javascript"> $(function(){ var setting={ data:{ simpleData:{ enable:true } } }; <!-- --> var zNodes=[ {"id":"1","pId":"0",'name':"1"}, {"id":"2","pId":"1",'name':"2"}, {"id":"3","pId":"2",'name':"3"} ]; $.fn.zTree.init($("#ztree2"),setting,zNodes); }); </script> </div> <div title="4"> <ul id="ztree3" class="ztree"></ul> <!-- 简单json 数据格式 --> <script type="text/javascript"> $(function(){ var setting={ data:{ simpleData:{ enable:true } }, <!-- 绑定单击事件 固定写法--> callback:{ onClick:function(event,treeId,treeNode){ <!--节点是否有page 数据 有就是叶子节点 就可以打开--> if(treeNode.page != undefined){ <!-- 节点是否已经被打开,打开就选中,没有打开就打开--> if($("#tabs").tabs("exists",treeNode.name)){ $("#tabs").tabs("select",treeNode.name) }else{ $("#tabs").tabs("add",{ title:treeNode.name, closable:true, content:'<iframe frameborder="0" height="100%" width="100%" src="https://www.baidu.com"></iframe>' }); } } } } }; $.ajax({ url:"../json/menu.json", type:"post", dataType:"json", success:function(result){ $.fn.zTree.init($("#ztree3"),setting,result); }, error:function(){ alert("加载失败,请稍后重试"); } }); }); </script> </div> </div> </div> <div data-options="region:'center'"> <div class="easyui-tabs" id="tabs"> <div title="1" data-options="closable:true">1</div> <div title="2">2</div> <div title="3">3</div> </div> </div> <div data-options="region:'east'" style="width: 200px">东</div> <div data-options="region:'south'" style="height: 50px">南</div> </body> </html>
原文地址:http://blog.51cto.com/lmdtx/2153229