当柳上原的风吹向天际的时候...

真正的快乐来源于创造

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks

#

父窗口调用子窗口函数实现是挺简单的,如下:
var wnd = window.open("XXX.html");
wnd.showDatas(datas);
以上代码中,showDatas是定义在子窗口的函数,datas是父窗口要给子窗口的数据。
需要注意的事,使用open语句打开窗口后,窗口未必能把所有代码全部载入,因此showDatas函数未必调用有效。
如果要有效,可以先把数据传递给子窗口,再在子窗口中延时调用showDatas函数。
如此,父窗口中的代码如下:
var wnd = window.open("XXX.html");
wnd.datas=datas;// 传递数据给子窗口
子窗口中的代码如下:
setTimeout(showDatas(window.datas),1000);// 延时时间可进行调整。
如上,父窗口调用子窗口函数才算完美。

反过来,子窗口要调用父窗口的函数要用opener对象,如:
opener.showMessages(msgs);
以上代码中,showMessages是定义在父窗口的函数,msgs是子窗口要给父窗口的数据。

2012年5月9日增补:
父窗口未必需要传数据给子窗口,而是子窗口需要操作父窗口的某些区域如div时,可以在父窗口打开子窗口的函数前将这个div的id找个地方(隐藏区域)存起来,当然这个地方不需要显示,当子窗口需要操作这个div时,直接调用父窗口的js函数即可,这个函数可以先从隐藏区域中得到div的id,再根据这个id操作div。
posted @ 2012-01-11 15:28 何杨 阅读(1426) | 评论 (0)编辑 收藏

下载地址:

效果:

核心代码:
<%@ page contentType="text/html; charset=UTF-8"%>

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>

<title>Dtree Sample</title>
<link rel="stylesheet" rev="stylesheet" href="web/css/style.css" type="text/css" />
<link rel="stylesheet" rev="stylesheet" href="web/css/dtree.css" type="text/css" />
<script src="web/js/dtree.js" type="text/javascript"></script>
</head>

<body>

<div id="treeDiv">
    
<div class="dtree">
        
<p><href="javascript: d.openAll();">全展开</a> | <href="javascript: d.closeAll();">全收起</a></p>
        
<script type="text/javascript">
            
<!--
    
            d 
= new dTree('d');
    
            d.add(
0,-1,'Root');
            d.add(
1,0,'1','web/jsp/1.jsp','显示1.jsp','rightFrame','','',false);
            d.add(
2,0,'2','web/jsp/2.jsp','显示2.jsp','rightFrame','','',false);
            d.add(
3,0,'3','web/jsp/3.jsp','显示3.jsp','rightFrame','','',false);
            d.add(
4,0,'4','web/jsp/4.jsp','显示4.jsp','rightFrame','','',false);
            d.add(
5,1,'李逵','test?page=likui','显示李逵','rightFrame','','',false);
            d.add(
6,1,'宋江','test?page=sj','显示宋江','rightFrame','','',false);
            d.add(
7,1,'鲁智深','test?page=lzs','显示鲁智深','rightFrame','','',false);           
    
            document.write(d);
    
            
//-->
        </script>
    
</div>
</div>
<div id="contentDiv">
    
<iframe id="index_mainframe" name="rightFrame" class="index_mainframe" src="web/jsp/blank.jsp" frameborder="0" scrolling="no" ></iframe>
</div>

</body>
</html>

dtree的css,js代码都不复杂,如果对其稍加改造,可以做出更眩的东西来。
posted @ 2012-01-04 19:44 何杨 阅读(311) | 评论 (0)编辑 收藏

说明:以下代码能原样复制输入XML的所有节点和属性,虽说使用ESQL和JavaCompute很容易完成此任务。但是将以下代码稍作修改,就可以对输入进行筛选,剪裁和重构的工作。

输入:
<id="1"><id="2">3</b></a>

代码:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
<xsl:template match="node()">
        
<xsl:copy>
            
<xsl:apply-templates select="@*|node()"/>
        
</xsl:copy>
    
</xsl:template>
 
    
<xsl:template match="@*">
        
<xsl:attribute namespace="{namespace-uri()}" name="{name()}">
            
<xsl:value-of select="."/>
        
</xsl:attribute>
    
</xsl:template>
 
    
<xsl:template match="text()">
        
<xsl:value-of select="."/>
    
</xsl:template>
</xsl:stylesheet>

输出:
<?xml version="1.0" encoding="UTF-8"?><id="1"><id="2">3</b></a>
posted @ 2011-12-21 20:14 何杨 阅读(593) | 评论 (1)编辑 收藏

     摘要: 1.使用Substring进行字符串截取输入:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><date>122811</date>输出:Code highlighting produced by Actipro CodeHig...  阅读全文
posted @ 2011-12-14 09:49 何杨 阅读(380) | 评论 (0)编辑 收藏

数据源(students.xml):
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="xsheet.xsl"?>
<students>
    
<student id="123">
        
<name>Andy</name>
        
<score>69</score>
    
</student>
    
<student id="345">
        
<name>bill</name>
        
<score>88</score>
    
</student>
    
<student id="678">
        
<name>Felix</name>
        
<score>96</score>
    
</student>
    
<student id="987">
        
<name>Zerg</name>
        
<score>72</score>
    
</student>
    
<student id="236">
        
<name>Grrr</name>
        
<score>59</score>
    
</student>
</students>

XSL文件(xsheet.xsl):
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    
    
<xsl:template match="/">
        
<html>
        
<head>
            
<title>成绩单</title>
        
</head>
        
<body>
            
<table border="1">
                
<caption>学生成绩单</caption>
                
<tr>
                    
<td>序号</td>
                    
<td>ID</td>
                    
<td>姓名</td>
                    
<td>成绩</td>
                
</tr>
                
<xsl:for-each select="students/student">
                
<xsl:sort order="descending"  select="score"/>
                    
<tr>
                        
<xsl:choose>
                            
<xsl:when test="position() mod 2 = 1">
                                
<xsl:attribute name="style">background:#336699;</xsl:attribute>
                            
</xsl:when>                            
                            
<xsl:otherwise>
                                
<xsl:attribute name="style">background:#00ffcc;</xsl:attribute>
                            
</xsl:otherwise>
                        
</xsl:choose>
                    
                        
<td><xsl:value-of select="position()"/></td>
                        
<td><xsl:value-of select="@id"/></td>
                        
<td><xsl:value-of select="name"/></td>
                        
<xsl:choose>
                            
<xsl:when test="score &gt; 60">
                                
<td><xsl:value-of select="score"/></td>
                            
</xsl:when>                            
                            
<xsl:otherwise>
                                
<td><font color="red"><xsl:value-of select="score"/></font></td>
                            
</xsl:otherwise>
                        
</xsl:choose>
                    
</tr>
                
</xsl:for-each>
            
</table>
            
<br/>
            
<table border="1">
                
<caption>统计表格</caption>
                
<tr><td>总分</td><td><xsl:value-of select="sum(//score)"/></td></tr>
                
<tr><td>个数</td><td><xsl:value-of select="count(/students/student)"/></td></tr>
                
<tr><td>及格人数</td><td><xsl:value-of select="count(/students/student[score > 60])"/></td></tr>    
                
<tr><td>平均分</td><td><xsl:value-of select="sum(//score) div count(/students/student)"/></td></tr>                            
            
</table>
        
</body>
        
</html>
    
</xsl:template>
    
</xsl:stylesheet>

用IE打开数据源文件的效果:


XSLT相关知识请参考:
http://soft-app.iteye.com/blog/916652
posted @ 2011-12-12 21:26 何杨 阅读(407) | 评论 (0)编辑 收藏

需要一个Mapping节点时,XMLTansformation节点通常是一个不错的选择,它可以使用XSLT将输入的XML转变成另一种形式的 XML,其开发速度高于在Compute节点中书写ESQL和在JavaCompute节点中书写Java代码,其缺陷在于缺乏访问外部数据的手段,有时 还需要上述两种节点的帮助。

XMLTransformation节点在Transformation选择项下,需要指定XSL文件的位置,可以通过其StylesheetName和StyleSheetDirectory来指定。以下是一个转换的例子:

输入:
<employees><employee id="001">Andy</employee><employee id="002">Bill</employee><employee id="034">Cindy</employee></employees>

转换XSL:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    
    
<xsl:template match="/">
        
<users>
        
<xsl:for-each select="employees/employee">
            
<user>
                
<sn><xsl:value-of select="position()"/></sn>
                
<id><xsl:value-of select="@id"/></id>
                
<name><xsl:value-of select="text()"/></name>
                
<pswd><xsl:value-of select="concat(@id,'_',text())"/></pswd>
            
</user>
        
</xsl:for-each>
        
</users>
    
</xsl:template>
    
</xsl:stylesheet>

输出:
<?xml version="1.0" encoding="UTF-8"?><users><user><sn>1</sn><id>001</id><name>Andy</name><pswd>001_Andy</pswd></user><user><sn>2</sn><id>002</id><name>Bill</name><pswd>002_Bill</pswd></user><user><sn>3</sn><id>034</id><name>Cindy</name><pswd>034_Cindy</pswd></user></users>
posted @ 2011-12-12 19:44 何杨 阅读(750) | 评论 (0)编辑 收藏

代码:
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;

import com.ibm.broker.javacompute.MbJavaComputeNode;
import com.ibm.broker.plugin.MbElement;
import com.ibm.broker.plugin.MbException;
import com.ibm.broker.plugin.MbMessage;
import com.ibm.broker.plugin.MbMessageAssembly;
import com.ibm.broker.plugin.MbOutputTerminal;


public class subflow_JavaCompute extends MbJavaComputeNode {

    
public void evaluate(MbMessageAssembly inAssembly) throws MbException {
        MbOutputTerminal out 
= getOutputTerminal("out");
        MbOutputTerminal alt 
= getOutputTerminal("alternate");

        MbMessage inMessage 
= inAssembly.getMessage();
        MbMessage outMessage 
= new MbMessage(inMessage);
        MbMessageAssembly outAssembly
=new MbMessageAssembly(inAssembly,outMessage);
        
        MbElement document
=outMessage.getRootElement();
        MbElement root
=document.getLastChild().getFirstChild();

        
try{
            Set
<String> selfDefNSSet=new HashSet<String>();// 用来存储自定义的名称空间名
            traverseAndRemoveNils(root,selfDefNSSet);// 遍历节点删除特定属性
            
            
if(selfDefNSSet.size()>0){
                traverseAndRemoveSelfDefNSNode(root,selfDefNSSet);// 遍历节点删除自定义名称空间节点
            }
        }
        
catch(Exception ex){
            ex.printStackTrace();
        }
        
        out.propagate(outAssembly);
    }

    
    
private void traverseAndRemoveNils(MbElement elm,Set<String> selfDefNSSet) throws Exception{
        
// get all the attributes of current element
        List <MbElement> attrSet = (List <MbElement>)elm.evaluateXPath("@*"); 
        
for(MbElement attr:attrSet){
            String name
=attr.getName().toString();
            String value
=attr.getValue().toString();
            
            
if(isNillAttr(name,value)){
                attr.detach();
            }
            
            
if(isSelfDefNS(name,value)){
                String[] arr
=name.split(":");
                selfDefNSSet.add(arr[
1]);
                attr.detach();
            }
        }
        
        
// get all sub elements of current element
        List <MbElement> nodeset = (List <MbElement>)elm.evaluateXPath("*"); 
        
for(MbElement childElm:nodeset){
            
// recursion
            traverseAndRemoveNils(childElm,selfDefNSSet);
        }
    }
    
    // 判断是否特定属性,a:nil,b:nil都算
    
private boolean isNillAttr(String name,String value){
        String patternStr
="(\\w+)(:nil)";
          
        
boolean result1 = Pattern.matches(patternStr, name);
        
boolean result2="true".equals(value);
        
        
return result1&&result2;
    }
    // 判断是否自定义名称空间
    
private boolean isSelfDefNS(String name,String value){
        String patternStr
="(xmlns:)(\\w+)";
          
        
boolean result = Pattern.matches(patternStr, name);
        
        
return result;
    }
   
    
private void traverseAndRemoveSelfDefNSNode(MbElement elm,Set<String> selfDefNSSet) throws Exception{
        String name
=elm.getName().toString();
        
        
if(isSelfDefNSNode(name,selfDefNSSet)){
            elm.detach();
        }
        
        
// get all sub elements of current element
        List <MbElement> nodeset = (List <MbElement>)elm.evaluateXPath("*"); 
        
for(MbElement childElm:nodeset){
            
// recursion
            traverseAndRemoveSelfDefNSNode(childElm,selfDefNSSet);
        }
    }
    // 判读节点是否自定义名称空间的限定名
    
private boolean isSelfDefNSNode(String name,Set<String> selfDefNSSet){
        String[] arr
=name.split(":");
        
        
if(arr.length==2){
            String ns
=arr[0];
            
            
return selfDefNSSet.contains(ns);
        }
else{
            
return false;
        }
    }
}

输入:
<contactInfo xmlns:ns1="http://tbccorp.com/Services/CustomerMgt/v1/"><homePhoneNumber as:b="c"><key xsi:nil="true"/><value></value></homePhoneNumber><workPhoneNumber><ns1:a>1644</ns1:a><key xsi:nil="true"/><value ns1:nil="true">5</value></workPhoneNumber><ns1:b>1949</ns1:b><mobilePhoneNumber xmlns:ns1="http://tbccorp.com/Services/CustomerMgt/v1/"><key xsi:nil="true"/><value>3159867097</value></mobilePhoneNumber></contactInfo>

输出:
<contactInfo><homePhoneNumber as:b="c"><key/><value/></homePhoneNumber><workPhoneNumber><key/><value>5</value></workPhoneNumber><mobilePhoneNumber><key/><value>3159867097</value></mobilePhoneNumber></contactInfo>
posted @ 2011-12-09 23:40 何杨 阅读(1567) | 评论 (0)编辑 收藏

     摘要: Cache的作用:在并发环境中减少重复性的对后台的调用,从而提高运行效率。Cache必须要做到的:1.保证Cache中的数据与后台系统数据的一致性。2.Cache必须要减少访问后台的操作以提高效率。如果不能同时做到以上两点,则Cache失去了意义。Cache的基本操作:Read(Get):按键值从Cache中取得想要的数据;Write(Put):将键值对放到Cache中;Reset(RemoveA...  阅读全文
posted @ 2011-09-27 15:32 何杨 阅读(527) | 评论 (0)编辑 收藏

     摘要: 注:以下Cache未加时效处理,是比较简陋的Cache方案。AbstractCacheMap基类,用来定义和限制子类的操作:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->package cachemap.base;/** *&nb...  阅读全文
posted @ 2011-09-27 10:00 何杨 阅读(974) | 评论 (0)编辑 收藏

任务:熟悉Subflow的使用

Subflow即子流程,当主流程的某个分支较有独立性且复杂是可以采用子流程的形式。
子流程必须具备一个Input和Output节点作为输入和输出,而主流程可以通过“Add Subflow”的方式将定义好的子流程加入进来,当作一个普通节点来使用。

Input和Output节点在Contruction中,以下是使用子流程的一个例子。

使用了子流程的主流程:


定义的子流程:


例程:
posted @ 2011-09-23 09:40 何杨 阅读(702) | 评论 (0)编辑 收藏

仅列出标题
共28页: First 上一页 6 7 8 9 10 11 12 13 14 下一页 Last