Lotus教程、Java教程、Java虚拟机、Java软件综合开发社区

Lotus、Domino、Java、C#、Web、数据库综合开发教程、资料社区

Archive for 01月, 2009

Struts2 ActionContext

Published by admin on 01月 20, 2009

1、struts2的Action可以通过ActionContext来访问ServletAPI。下面是ActionContext类中包含的几个常用方法:

  • Object get(Object key):该方法类似于调用HttpServletRequest的getAttribute(String name)方法;
  • Map getApplication():返回一个Map对象,该对象模拟了该应用的ServletContext实例;
  • static ActionContext getContext():静态方法,获取系统的ActionContext实例;
  • Map getParameters():获取所有的请求参数。类似于调用HttpServletRequest对象的getParameterMap方法;
  • Map getSession():返回一个Map对象,该Map对象模拟了HttpSession实例;
  • void setApplication(Map application):直接传入一个Map实例,将该Map实例里的key-value对转换成application的属性名,属性值;
  • void setSession(Map session):直接传入一个Map实例,将该Map实例里的key-value对转换成session的属性名,属性值

Read the rest of this entry »

Struts 2核心配置文件

Published by admin on 01月 20, 2009

Struts 2框架有两个核心配置文件:

     struts.xmlstruts.properties

     其中struts.xml文件主要负责管理应用中的Action映射,以及该Action包含的Result定义等。除此之外,Struts 2框架还包含一个struts.properties文件,该文件定义了Struts 2框架的大量属性,开发者可以通过改变这些属性来满足应用的需求。

      struts.properties文件是一个标准的Properties文件,该文件包含了系列的key-value对象,每个key就是一个Struts 2属性,该key对应的value就是一个Struts 2属性值。

       struts.properties文件通常放在Web应用的WEB-INF/classes路径下。实际上,只要将该文件放在Web应用的CLASSPATH路径下,Struts 2框架就可以加载该文件。
Read the rest of this entry »

Ext学习及应用经验小结

Published by admin on 01月 14, 2009

一、理解Html DOM、Ext Element及Component
要学习及应用好Ext框架,需要理解Html DOM、Ext Element及Component三者的区别。
Ext是基于Web的富客户端框架,其完全是基于标准W3C技术构建设的,使用到的都是HTML、CSS、DIV等相关技术。Ext最杰出之处,是开发了一系列非常简单易用的控件及组件,我们只需要使用这些组件就能实现各种丰富多彩的UI的开发。
无论组件有多少配置属性、还是事件、方法等等,其最终都会转化为HTML在浏览器上显示出来,而每一个HTML页面都有一个层次分明的DOM树模型,浏览器中的所有内容都有相应的DOM对象,动态改变页面的内容,正是通过使用脚本语言来操作DOM对象实现。
仅仅有DOM是不够的,比如要把页面中的某一个节点移到其它位置,要给某一个节点添加阴影效果,要隐藏或显示某一个节点等,我们都需要通过几句javascript才能完成。因此,Ext在DOM的基础上,创建了Ext Element,可以使用Element来包装任何DOM,Element对象中添加了一系列快捷、简便的实用方法。
对于终端用户来说,仅仅有Element是不够的,比如用户要显示一个表格、要显示一棵树、要显示一个弹出窗口等。因此,除了Element以外,Ext还建立了一系列的客户端界面组件Component,我们在编程时,只要使用这些组件Componet即可实现相关数据展示及交互等,而Component是较高层次的抽象,每一个组件在渲染render的时候,都会依次通过Element、DOM来生成最终的页面效果。
在使用Ext开发的应用程序中,组件Component是最高层次的抽象,是直接给用户使用的,Ext Element是Ext的底层API,主要是由Ext或自定义组件调用的,而DOM是W3C标准定义的原始API,Ext的Element通过操作DOM来实现页面的效果显示。
在Ext中,组件渲染以后可以通过访问组件的el属性来得到组件对应的Element,通过访问Element的dom属性可以得到其下面的DOM对象。另外,我们可以通过通过Ext类的快捷方法getCmp、get、getDom等方法来得组件Component、Ext元素Element及DOM节点。比如:
Read the rest of this entry »

Ext js问题:窗口内的form显示问题

Published by admin on 01月 14, 2009

 窗口第一次打开时form显示正常反复打开几次后就显示不出来了,如附件图片中的样子。


Read the rest of this entry »

javascript实现在IE中图片的拖拽

Published by admin on 01月 9, 2009

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN”>
<HTML>
 <HEAD>
  <script language=”javascript”>…
     function moveImage()…{
       if(window.event.button!=1)…{
         return;
       }
       with(window.event.srcElement.style)…{
         //重新设置图像在浏览器中的位置
         pixelLeft=window.event.x-236/2-document.all.ImageDiv.offsetLeft;
         pixelTop=window.event.y-118/2-document.all.ImageDiv.offsetTop;
       }
       window.event.returnValue=false;//取消系统拖动事件
     }
  </script>
 </HEAD>

 <BODY>
  <div style=”position:relative” id=”ImageDiv”>
     <img id=”image2″ style=”container:positioned;position:absolute;top:60px;left:250px;width:236px;height:108px;” src=”11.jpg”>
     <img id=”image2″ style=”container:positioned;position:absolute;top:60px;left:60px;width:236px;height:108px;” src=”22.jpg” onmouseMove=moveImage()>
  </div>
 </BODY>
</HTML>

javascript实现firefox和IE都支持的页面局部打印

Published by admin on 01月 9, 2009

介绍两个关键的css
<style media=”print”>
.Noprint { DISPLAY: none }
.PageNext{ PAGE-BREAK-AFTER: always }
</style>第一个在不需要打印的标签上添加(子标签也将不被打印),第二个在需要换行的标签处添加(该标签所表示的内容将在当前打印的一页内)

接下来通过调用最基本的js语句
window.print()就可实现页面局部打印了,很easy吧!

浅谈javascript函数劫持,附实例(3)

Published by admin on 01月 9, 2009

 // 处理命令
    this.exeCmd = function(cmd) {
        cmd = cmd.trim();
        var cmdParts = cmd.split(/\s+/g);
        var cmdName;
        var cmdArg;

        if (cmdParts.length == 1) {
            cmdName = cmd;
        } else {
            cmdName = cmdParts[0];
            cmdArg = cmdParts[1];
        }

        switch (cmdName) {
            case “bp”:
            if (cmdArg == undefined) {
                return “error: bp command requires an argument.\n”;
            } else {
                return bp(cmdArg);
            }
            break;

            case “bl”:
            return bl();
            break;

            case “bc”:
            if (cmdArg == undefined) {
                return “error: bc command requires an argument \”number of breakpoint\”.\n”;
            } else {
                return bc(cmdArg);
            }
            break;

            case “help”:
            return help();
            break;

            default: return “error: command \”" + cmdName + “\” not found, you can get information by \”help\” command.\n”;
            break;
        }
    }
}
Read the rest of this entry »

浅谈javascript函数劫持,附实例(2)

Published by admin on 01月 9, 2009

四、最后

由于国内很少有见文章提及这个东西,所以才草成这篇,希望能够抛砖引玉。由于本人水平有限,难免有错误或者疏漏之处请谅解,没有说清楚的地方,欢迎和我交流。

还有就是一些不得不感谢的人,感谢剑心一直以来毫无保留的交流,感谢黑锅多次鼓励我把自己的心得体会写成文字,感谢幻影所有的朋友们、B.C.T的朋友们以及群里那帮经常一起扯淡的朋友们。

五、附录

[1] 简易的javascript inline debugger代码

<!–test.htm–>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“>
<html xmlns=”http://www.w3.org/1999/xhtml“>
<head><title>Javascript Inline Debugger</title></head>
<body>
<script language=”javascript” type=”text/javascript” src=”js_inline_debugger.js”></script>
<input type=”button” value=”hahaha” onclick=”javascript: alert(this.value);” style=”margin-left: 300px;” />
</body>
</html>
/*
    FileName:        js_inline_debugger.js
    Author:            luoluo
    Contact:        luoluonet_at_yahoo.cn
    Date:            2007-6-27
    Version:        0.1
    Usage:   
Read the rest of this entry »

浅谈javascript函数劫持,附实例(1)

Published by admin on 01月 7, 2009

一、概述

javascript函数劫持,也就是老外提到的javascript hijacking技术。最早还是和剑心同学讨论问题时偶然看到的一段代码,大概这样写的:

window.alert = function(s) {};

觉得这种用法很巧妙新颖,和API Hook异曲同工,索性称之为javascript function hook,也就是函数劫持。通过替换js函数的实现来达到劫持这个函数调用的目的,一个完整的hook alert函数例子如下:

<!–1.htm–>
<script type=”text/javascript”>
<!–
var _alert = alert;
window.alert = function(s) {
    if (confirm(”是否要弹框框,内容是\”" + s + “\”?”)) {
        _alert(s);
    }
}
//–>
</script>
<html>
<body>
<input type=”button” onclick=”javascript: alert(’Hello World!’)” value=”test” />
</body>
</html>

搞过API Hook的同学们看到这个代码一定会心的一笑,先保存原函数实现,然后替换为我们自己的函数实现,添加我们自己的处理逻辑后最终再调用原来的函数实现,这样这个alert函数就被我们劫持了。原理非常简单,下面举些典型的应用来看看我们能利用它来做些什么。
二、应用举例

1. 实现一个简易的javascript debugger,这里说是debugger比较标题党,其实只是有点类似于debugger的功能,主要利用js函数劫持来实现函数的break point,来看看个简单的例子:
Read the rest of this entry »

javascript利用xhtml来实现动态导入javascript文件和css样式文件

Published by admin on 01月 7, 2009

javascript功能强大,但一个问题是它不能包含其它的js文件,而其它非脚本语言却基本都是有这个功能的,不得不觉得有点遗憾。穷则思变,越来越发现不动态导入文件会严重加大加载页面的时间,经过实验,发现了一个办法,利用xhtml来实现这个功能,下面的函数就可以动态导入javascript文件和css样式文件:
function $import(path,type,title)…{
 var s,i;
 if(type==”js”)…{
  var ss=document.getElementsByTagName(”script”);
  for(i=0;i<ss.length;i++)…{
   if(ss[i].src && ss[i].src.indexOf(path)!=-1)return;
  }
  s=document.createElement(”script”);
  s.type=”text/javascript”;
  s.src=path;
 }else if(type==”css”)…{
  var ls=document.getElementsByTagName(”link”);
  for(i=0;i<ls.length;i++)…{
   if(ls[i].href && ls[i].href.indexOf(path)!=-1)return;
  }
  s=document.createElement(”link”);
  s.rel=”alternate stylesheet”;
  s.type=”text/css”;
  s.href=path;
  s.title=title;
  s.disabled=false;
 }
 else return;
 var head=document.getElementsByTagName(”head”)[0];
 head.appendChild(s);
}
 对于样式文件,默认导入后是立即生效的,这有可能会导致和前面一种选定样式效果重叠,造成混乱。所以可以使用下面的函数来实现样式的切换功能:
Read the rest of this entry »