在webroot下面防止一个js的文件夹。放入dtree.js还有op.js这个两个文件
<a href="javascript: d.openAll();">展开所有组织机构</a> | <a href="javascript: d.closeAll();">关闭组织机构</a>
<script type="text/javascript">
<!--
d = new dTree('d');
d.config.folderLinks=true;
//id, pid, name, url, title, target, icon, iconOpen, open
d.add(0,-1,'组织机构','','','');
<%
String sql = "select * from tree";
Connection conn = null;
try{
conn = getConnection();
ResultSet rst = executeQuery(conn,sql);
while(rst.next()){
System.out.println("---->"+rst.getString("id"));
System.out.println("---->"+rst.getString("pid"));
%>
d.add(<%=rst.getString("id")%>,<%=rst.getString("pid")%>,'<%=rst.getString("name")%>','','<%=rst.getString("name")%>','<%=rst.getString("target")%>');
<%
}
rst.close();
rst = null;
conn.close();
conn = null;
}catch(Exception ex){
out.println(ex.toString());
}
%>
document.write(d);
//-->
</script>
d.add(0,-1,'组织机构','','','');------这里的第一个0表示数据第一个最 根节点的 父亲节点的值
如果是0就是0,如果是null那就写null
还有JavaScript的路径要写对。
/Files/spiritahead/js.rar-----里面包含了 要求用到的js
posted @
2009-03-23 09:52 Johnhe 阅读(156) |
评论 (0) |
编辑 收藏
摘要:
public class Student implements Comparable {
private String userid;
private ...
阅读全文
posted @
2009-03-10 17:43 Johnhe 阅读(135) |
评论 (0) |
编辑 收藏
package com.corejava;
public class TestStringSplit {
/**
* @author 袁晓江
*/
public static void main(String[] args) {
String s1 = ";mb001,mb002;xk001,xk002,xk003,xk004;sts001,sts002,sts003,sts004,sts005;;";
String s2 = ";mb001,mb002;xk001,xk002,xk003,xk004;sts001,sts002,sts003,sts004,sts005; ;";
String s3 = ";mb001,mb002;xk001,xk002,xk003,xk004;sts001,sts002,sts003,sts004,sts005;;a";
String s4 = "wxyb001,wxyb004,wxyb005,wxyb007,wxyb008;;xk002;;";
String s5 = ";wxyb001,wxyb004,wxyb005,wxyb007,wxyb008;;xk002;;";
String s6 = ";wxyb001,wxyb004,wxyb005,wxyb007,wxyb008;;xk002;";
String s7 = ";mb001,mb002;xk001,xk002,xk003,xk004;sts001,sts002,sts003,sts004,sts005;;a";
String s8 = ";wxyb001,wxyb004,wxyb005,wxyb007,wxyb008;;xk002;a";
String[] _s1 = s1.split("\\;");
//-----------------4这个地方打印值是4,倒数第二个分号和倒数第一个分号之间是没有东西的,就不算是么?
System.out.println(_s1.length);
String[] _s2 = s2.split("\\;");
//-----------------5这个地方打印值是5,倒数第二个分号和倒数第一个分号之间是有一个空格
System.out.println(_s2.length);
String[] _s3 = s3.split("\\;");
//-----------------6这个地方打印值是6,倒数第二个分号和倒数第一个分号之间是没有东西的,但是最后一个分号后面有一个值
System.out.println(_s3.length);
String[] _s4 = s4.split("\\;");
//-----------------3这个地方打印值是3,倒数第二个分号和倒数第一个分号之间是没有东西的,但是最后一个分号后面有一个值
System.out.println(_s4.length);
String[] _s5 = s5.split("\\;");
System.out.println(_s5.length);//-----------------4
String[] _s6 = s6.split("\\;");
System.out.println(_s6.length);//-----------------4
String[] _s7 = s7.split("\\;");
System.out.println(_s7.length);//-----------------6
String[] _s8 = s8.split("\\;");
System.out.println(_s8.length);//-----------------5
}
}
为什么啊。不是很明白这里的split方法。
后来不得已使用substring截取想要的字符串
posted @
2009-03-10 17:31 Johnhe 阅读(1374) |
评论 (3) |
编辑 收藏
<html>
<head>
</head>
<body>
<form>
<input type=checkbox name='nID' value='1'> 1<br>
<input type=checkbox name='nID' value='2'> 2<br>
<input type=checkbox name='nID' value='3'> 3<br>
</form>
</body>
<script type="text/javascript" language="javascript">
alert(window.document.getElementsByName("nID")[1].value);
window.document.getElementsByName("nID")[1].checked = true;
</script>
</html>
从数据库里取值。再勾选。自己点滴记录吧。很简单。
要放在下面 script脚本。
if(wxybsb.length > 0){
for(var b=0;b<=wxybsbary.length;b++){
if(wxybsbary[b]=="wxyb001"){
window.document.getElementsByName("wxybsb")[0].checked = true;
}
javascript里面 循环 是用var来定义的。不是int 昨天 查了一天 这个小问题。
记录下。
posted @
2009-03-10 09:41 Johnhe 阅读(108) |
评论 (0) |
编辑 收藏
String[] test = {"a","b","c"};
StringBuffer testStr = new StringBuffer();
for(int i =0;i<test.length;i++){
testStr.append(test[i]).append(",");
}
String[] test1 = {};
StringBuffer test1Str = new StringBuffer();
String test1String = "";
if(test1.length == 0){
test1String = "";
}else{
for(int i =0;i<test1.length;i++){
test1Str.append(test1[i]).append(",");
}
test1String = test1Str.substring(0, test1Str.length()-1);
}
String[] test2 = {"e","f","g"};
StringBuffer test2Str = new StringBuffer();
String test2String = "";
if(test2.length == 0){
test2String = "";
}else{
for(int i =0;i<test2.length;i++){
test2Str.append(test2[i]).append(",");
}
test2String = test2Str.substring(0, test2Str.length()-1);
}
String testString = testStr.substring(0, testStr.length()-1);
String finalString = "";
if(!testString.equals("")){
finalString += testString;
}
if(!test1String.equals("")){
finalString += ";"+test1String;
}
if(!test2String.equals("")){
finalString +=";"+test2String;
}
System.err.println(finalString);
String sql2 = "update CDS00COR set C001DWMI = '"+2+"' ,dangerstyle = '"+finalString+"' where corpkey = '"+1+"'";
System.out.println("----->"+sql2);
很简单的。自己记录下
posted @
2009-03-05 14:26 Johnhe 阅读(148) |
评论 (0) |
编辑 收藏
中午碰到的问题自己记录下。关于request.getParameterValues("String")
保存的时候,总是碰到空指针异常
我当时自己知道是request.getParameterValues("String")取到的是空。
解决办法就是判断吧-------------->
String wxybsbString = "";
if(request.getParameterValues("wxybsb") == null){
wxybsbString = "";
}
if(request.getParameterValues("wxybsb") != null){
String[] wxybsb = request.getParameterValues("wxybsb");
StringBuffer wxybsbStr = new StringBuffer();
for(int i=0;i<wxybsb.length;i++){
wxybsbStr.append(wxybsb[i]).append(",");
}
wxybsbString = wxybsbStr.substring(0,wxybsbStr.length()-1);
}
System.out.println("袁晓江"+wxybsbString);
这样就不会碰到空指针了.自己记录下
posted @
2009-03-05 13:58 Johnhe 阅读(3276) |
评论 (3) |
编辑 收藏
String[] sid = request.getParameterValues("selectFlag");
UserManager.getInstance().deleteUser(sid);
//for(int i=0; i<sid.length; i++) {
// UserManager.getInstance().deleteUser(sid[i]);
//}
}
/** *//**
* 用数组实现删除 sql = select from t_user where user_id in ('b001', 'b002', )
* @param userIds
*/
public void deleteUser(String[] userIds) {
StringBuffer sbStr = new StringBuffer();
for(int i=0; i<userIds.length; i++) {
sbStr.append("'")
.append(userIds[i])
.append("',");
}
String sql = "delete from t_user where user_id in (" + sbStr.substring(0, sbStr.length()-1) + ")";
System.out.println("sql= " + sql);
Connection conn = null;
Statement stmt = null;
try {
conn = DB.getConn();
stmt = conn.createStatement();
stmt.executeUpdate(sql);
} catch(SQLException e) {
e.printStackTrace();
} finally {
DB.close(stmt);
DB.close(conn);
}
}
posted @
2009-03-04 17:57 Johnhe 阅读(123) |
评论 (0) |
编辑 收藏
摘要: <html>
<head>
<script type="text/javascript">
functi...
阅读全文
posted @
2009-03-04 16:19 Johnhe 阅读(399) |
评论 (0) |
编辑 收藏
ThreadLocal是一个线程隔离(或者说是线程安全)的变量存储的管理实体(注意:不是存储用的),它以Java类方式表现;
synchronized是Java的一个保留字,只是一个代码标识符,它依靠JVM的锁机制来实现临界区的函数、变量在CPU运行访问中的原子性。
理解ThreadLocal中提到的变量副本
事实上,我们向ThreadLocal中set的变量不是由ThreadLocal来存储的,而是Thread线程对象自身保存。当用户调用ThreadLocal对象的set(Object o)时,该方法则通过Thread.currentThread()获取当前线程,将变量存入Thread中的一个Map内,而Map的Key就是当前的ThreadLocal实例。请看源码,这是最主要的两个函数,能看出ThreadLocal与Thread的调用关系:
public void set(T value) {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null)
map.set(this, value);
else
createMap(t, value);
}
ThreadLocalMap getMap(Thread t) {
return t.threadLocals;
}
所谓的变量副本,即是对Object Reference(对象引用)的拷贝
理解Thread和 ThreadLocal对变量的引用关系
实际上Thread和ThreadLocal对变量引用关系就像是坐标系中的X轴和Y轴,是从两个维度上来组织对变量的引用的。
- 首先说Thread。 我们知道一个ThreadOne的执行会贯穿多个方法MethodA、MethodB、MethodC这些方法可能分布于不同的类实例。假设,这些方法分别使用了ThreadLocalA、ThreadLocalB、ThreadLocalC来保存线程本地变量,那么这些变量都存于ThreadOne的Map中,并使用各自的ThreadLocal实例作为key。 因此,可以认为,借助ThreanLocal的set方法,在X轴上,Thread横向关联同一线程上下文中来自多个Method的变量引用副本。
接着说ThreadLocal。 一个MethodA中的X变量将被多个线程ThreadOne、ThreadTwo、ThreadThree所访问。假设MethodA使用ThreadLocal存储X,通过set方法,以ThreadLocal作为key值,将不同线程来访时的不同的变量值引用保存于ThreadOne、ThreadTwo、ThreadThree的各自线程上下文中,确保每个线程有自己的一个变量值。因此,可以认为,ThreadLocal是以Method为Y轴,纵向关联了处于同一方法中的不同线程上的变量。
posted @
2009-03-04 16:04 Johnhe 阅读(316) |
评论 (0) |
编辑 收藏
这是pojos:
/** *//**
*
* @author 袁晓江
* @hibernate.class table="t_organization"
*
*/
public class Organization {
/** *//**
* @hibernate.id
* generator-class="native"
*/
private int id;
/** *//**
* @hibernate.property
*/
private String name;
/** *//**
* @hibernate.property
*/
private String sn;//编号
/** *//**
* @hibernate.property
*/
private String description;
/** *//**
* @hibernate.many-to-one
* column="pid" not-found="ignore"
*/
private Organization parent;
//invserse=true让多的一方维护一的那一方。
/** *//**
* @hibernate.set inverse="true"
* @hibernate.key column="pid"
* @hibernate.one-to-many
* class="com.oa.model.Organization"
*/
private Set<Organization> children;
附上Organization.hbm.xml的配置文件:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class table="t_organization" name="com.oa.model.Organization">
<id access="field" name="id">
<generator class="native"/>
</id>
<property name="name" access="field"/>
<property name="sn" access="field"/>
<property name="description" access="field"/>
<many-to-one not-found="ignore" column="pid" access="field" name="parent"/>
<!-- inverse="true"的时候 把每个孩子放到父亲里的时候,会不存在pid的值 -->
<set access="field" name="children" inverse="true">
<key column="pid"/>
<one-to-many class="com.oa.model.Organization"/>
</set>
</class>
</hibernate-mapping>
--------------------------------------------
这里我放了inverse="true"
--------------------------------------------
这里是我的测试方法:
public class OrgTest2 extends TestCase {
public void testOrg(){
Session session = HibernateUtils.getSession();
session.beginTransaction();
Set set = new HashSet();
Organization org2 = new Organization();
org2.setName("org2");
set.add(org2);
Organization org3 = new Organization();
org3.setName("org3");
set.add(org3);
//
Organization org4 = new Organization();
org4.setName("org4");
set.add(org4);
//
Organization org1 = new Organization();
org1.setName("org1");
org1.setChildren(set);
session.save(org1);
session.save(org2);
session.save(org3);
session.save(org4);
session.beginTransaction().commit();
}
存在这样的一个问题:
就是org2,org3,org4.不能正确的保存到数据库里。
也就是org2,org3,org4的pid的值都是空。
我仔细查了下原因是inverse="true"造成的
可是我没有明白到底是怎么回事.?
有人知道为什么么?
让多的这方去维护.
posted @
2009-03-04 15:58 Johnhe 阅读(2083) |
评论 (0) |
编辑 收藏