无忧无卤

鸟在笼中,恨关羽不能张飞;人处世上,要八戒更需悟空

2008年3月29日

    一、编写helloworld程序

从helloworld开始,在JQuery库中,$为JQuery的简写形式。

<html> 

        <head> 

            <script src="../jquery-1.3.1.js" type="text/javascript"></script>     

            <script type="text/javascript"> 

                //其中$(document).ready(function(){}),可以简写为$(function(){}); 

                $(document).ready(function(){ //dom加载完毕后执行,类似于window.onload 

                        alert('helloworld !'); 

                }); 

            </script> 

        </head> 

        <body><body> 

</html> 

    二、$(document).ready与window.onload比较。

    1、执行时机,window.onload为必须等待网页所有内容加载完毕后(包括图片)后才能执行。

         而$(document).ready则在网页DOM结构绘制完毕后就执行,可能内容没有加载完毕。

    2、编写个数,window.onload不能进行多次编写,后面编写的将覆盖前面编写的。$(document).ready可以进行多次编写。

         每次都能够执行。

posted @ 2011-04-08 23:09 beyond 阅读(887) | 评论 (0)编辑 收藏

解决方法:
1、修改ext-all.css,找到.x-grid3-header-offset,修改为.x-grid3-header-offset{padding-left:1px;/*width:10000px;*/width:auto;}
2、在grid中加入下面代码:

复制代码 代码如下:

monitorResize: true,
doLayout: function() {
this.setSize(Ext.get(this.getEl().dom.parentNode).getSize(true));
Ext.grid.GridPanel.prototype.doLayout.call(this);
}

 

转http://www.fengfly.com/plus/view-165078-1.html
posted @ 2010-02-04 14:33 beyond 阅读(369) | 评论 (0)编辑 收藏

js 未结束的字符串常量

今天在做JAVASCRIPT的时候,发现老是出现”未结束的字符串常量”.

自己找了下应该是传参数的时候,有特殊字符引起的.网上也找了下,也有好多出现这种情况.做下总结,以方便以后查阅.

1.JAVASCRIPT引用时,使用的字符语言不一致.
比如:<script type=”text/javascript” src=”xxx.js” charset=”UTF-8″>.xxx.js文件内部使用的是GB2312的格式,外面调用使用的是UTF-8,所以文件内部部分特殊字符因为格式不一致,出现乱码,造成此原因.

2.JAVASCRIPT输出HTML字符时,前后标记不匹配.
这种比较常见,往往在输出字符串时,出现单引号(’)或双引号(”)不配对,或者是在document.write()的时候,没有正确输出单引号(’)或双引号(”)

3.参数内出现HTML标记语言或包含换行符
我今天所遇到的是这种情况.因为我所得到的数据以参数形式传给一函数,结果该数据里包含换行符,造成了此错误.
如:一般测试时只使用单行的数据,是正常的,未出现这个错误,.
当测试时使用多行数据,并使用回车链换行,就出行了此错误.因为里面包含了换行符

对于第3种情况,我的解决方法是:不直接将该数据以参数形式传递,而是先将其赋值在一个隐藏的文本内,需要调用的函数里只需读取该文本里的内容即可.

转 http://www.javaeye.com/topic/400721
posted @ 2010-02-04 10:27 beyond 阅读(330) | 评论 (0)编辑 收藏
Weblogic和hibernate3异常:ClassNotFoundException: org.hibernate.hql.ast.HqlToken
2009年08月25日 星期二 12:37

在做项目的时候,我用weblogic跑了一下自己的程序(开发一直在tomcat下),发现出现了这样的问题,
ClassNotFoundException: org.hibernate.hql.ast.HqlToken ,郁闷了半天,在tomcat下没有任何错误,为何到weblogic就有问题了呢?
在百度和google上搜了好久,换了n个关键词,才搜到原因如下:
原因:
Hibernate3.0 采用新的基于ANTLR的HQL/SQL查询翻译器,在Hibernate的配置文件中,hibernate.query.factory_class属性用来选择查询翻译器。
(1)选择Hibernate3.0的查询翻译器:
hibernate.query.factory_class= org.hibernate.hql.ast.ASTQueryTranslatorFactory
(2)选择Hibernate2.1的查询翻译器
hibernate.query.factory_class= org.hibernate.hql.classic.ClassicQueryTranslatorFactory
为了使用3.0的批量更新和删除功能,只能选择(1)否则不能解释批量更新的语句,当使用的时候出现了不支持条件输入中文的情况。
选择(2)可以支持输入中文,但没法解释批量更新语句了
在hibernate3中需要用到antlr,然而这个包在weblogic.jar中已经包含了antrl类库,就会产生一些类加载的错误,
无法找到在war或者ear中的hibernate3.jar。
出现这个错误之后,antlr会调用System.exit(),这样weblogic就会中止服务。
原来是冲突了,解决方法也很简单,就是添加
<prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory
</prop>
这个属性后,就可以解决这个问题了。
有一个人的博客上写的也是也这个方法,不过他的org.hibernate.hql.classic.ClassicQueryTranslatorFactory写错了,
害的我以为这个方法不能用了,结果看看了,是他上面写错了,下面的是正确的,郁闷的是我拷贝的是上面的,最总还是被我发现了。


转 http://hi.baidu.com/lei55022033/blog/item/b20ad52c8c9f7ae58b139940.html

posted @ 2010-02-01 15:31 beyond 阅读(1081) | 评论 (0)编辑 收藏

Red Hat Enterprise 5 序列号2007年03月29日 星期四 上午 02:06作系统版本的第四次重要版本发布, Red Hat 酝酿发布 RHEL 5 已经超过了两年, 主要变化包括 Linux 内核由

2.6.9 升级为 2.6.18, 支持 Xen 虚拟化技术, 集群存储等.
RHEL5的版本主要分为 Sever 和 Desktop 两个版本。
具体来说,Server版本分为:
· Red Hat Enterprise Linux Advanced Platform - 对应以前的 Red Hat Enterprise Linux AS
· Red Hat Enterprise Linux - 对应以前的 Red Hat Enterprise Linux ES
Desktop 版本分为:
· Red Hat Enterprise Linux Desktop - 对应以前的Red Hat Desktop
· Red Hat Enterprise Linux Desktop with Workstation option - 对应以前的Red Hat Enterprise

Linux WS
主要的功能包括:
1. 虚拟化技术
在各种平台上支持虚拟化技术
在 Red Hat Enterprise Linux Advanced Platform 支持存储与扩展的服务器虚拟化技术
Red Hat Network 提供各种虚拟化系统的支持
virt-manager, libvirt/virsh管理工具
2. 内核与性能
基于 Linux 2.6.18 内核
支持多核处理器
广泛的新硬件支持
更新的基于 Kexec/Kdump 的 Dump 支持
支持 Intel Network Accelerator Technology (IOAT)
对于大型SMP系统技持的增强
增强的管道缓存
内核缓存接合能力用于改进IO缓存操作
3. 安全
SELinux 增强
图形化 SELinux 管理界面
集成的目录和安全机制
增强的 IPESEC 提高安全与性能
新的审计机制用于提供新的搜索、报表和实时监控的能力
4. 网络与互操作性
支持 Autofs, FS-Cache 和 iSCSI
增强的 IPv6 支持
改进的 Microsoft 文件/打印和Active Directory集成
5. 桌面
更新的管理工具、应用程序和对笔记本的支持
改进的 ACPI (一种高级的电源管理)支持,包括 Suspend to Disk
智能卡登录,包括 PKI/Kerberos 认证
集成的多媒体支持
增强的即插即用支持
Network Manager 提供自动的有线和无线网络配置
基于 AIGLX/Compiz 的图形化界面(支持淡化、透明等效果)
6. 开发环境
增强的开发工具,包括 System Tap 和 Frysk
GCC4.1 和 glibc 2.5 工具链
7. 存储
支持根设置多路 IO ( MPIO ),提高可用性
服务器产品中包含单系统/客户的 Red Hat Global File System 支持
块设备数据加密支持
8. 管理
安装过程更新简化系统配
基于 Yum/Pup 的 Red Hat Network 更新
Conga 集群和存储管理

ISO 的内容和注册
与产品相关套件的软件组件包的结构与以前版本的 红帽企业 Linux 有所不同。不同种类的媒介套件和 ISO 映像被减少到两种:

红帽企业 Linux 5 服务器

红帽企业 Linux 5 客户端


ISO 映像包含大量的可选软件包,它提供了核心分发版本外的其他功能,如:虚拟化、群集和群集存储。关于服务器套件、客户端套件和可选套件的更多信息,请参考 http://www.redhat.com/rhel/

因为可选的内容也存在在相同的树或 ISO 映像中,所以应该特别注意不要使安装的组件和订阅所提供的组件不匹配。如果这种情况发生了,系统存在错误或安全漏洞的可能性将会增加。

为了保证安装的组件和订阅相匹配,红帽企业 Linux 5 需要输入一个 安装号。它被用来配置安装程序来提供正确的软件包。安装号码包含在你的订阅里。

如果您没有输入安装号码,只有核心服务器或 Desktop 将会被安装。其它功能可以在以后被手工安装。关于安装号码的更多信息,请参考 http://www.redhat.com/apps/support/in.html

在安装过程中被使用的安装号码将被存放在 /etc/sysconfig/rhn/install-num 里。当在 红帽网络 注册时,这个文件将自动被 rhn_register 引用,来决定系统应该订阅到哪个合适的子通道。

RHEL 5 安装 序列号

服务器:

* Red Hat Enterprise Linux (Server including virtualization):
2515dd4e215225dd

+ Red Hat Enterprise Linux Virtualization Platform:
49af89414d147589

客户端:

* Red Hat Enterprise Linux Desktop:
660266e267419c67

+ Red Hat Enterprise Linux Desktop + Workstation Option:
da3122afdb7edd23

+ Red Hat Enterprise Linux Desktop + Workstation + DualOS Option
(Virtualization):
7fcc43557e9bbc42

+ Red Hat Enterprise Linux Desktop + DualOS Option (Virtualization):
fed67649ff918c77

posted @ 2009-11-12 21:52 beyond 阅读(1473) | 评论 (0)编辑 收藏

    整合ssh框架
    翻译drools5
posted @ 2009-06-26 18:08 beyond 阅读(245) | 评论 (1)编辑 收藏
1.什么是数据库事务,以及作用?

    数据库事务:
                 事务是由相关操作构成的一个完整的操作单元,在一个事物内,数据的修改一起提交或撤销,如果发生故障或系统错误,
                 整个事物也会自动撤销。
    优点:
          把逻辑相关的操作分成了一个组
          在数据永久改变前,可以预览数据变化
          能过保证数据的读一致性
posted @ 2009-06-22 11:35 beyond 阅读(565) | 评论 (0)编辑 收藏

1. 介绍

1)DOM(JAXP Crimson解析器)
        DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。

2)SAX

        SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。
   选择DOM还是选择SAX? 对于需要自己编写代码来处理XML文档的开发人员来说,  选择DOM还是SAX解析模型是一个非常重要的设计决策。 DOM采用建立树形结构的方式访问XML文档,而SAX采用的事件模型。

  DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。

  SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。

3)JDOM           http://www.jdom.org/

          JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。正在考虑通过“Java规范请求JSR-102”将它最终用作“Java标准扩展”。从2000年初就已经开始了JDOM开发。

  JDOM与DOM主要有两方面不同。首先,JDOM仅使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。第二,API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用。

  JDOM文档声明其目的是“使用20%(或更少)的精力解决80%(或更多)Java/XML问题”(根据学习曲线假定为20%)。JDOM对于大多数Java/XML应用程序来说当然是有用的,并且大多数开发者发现API比DOM容易理解得多。JDOM还包括对程序行为的相当广泛检查以防止用户做任何在XML中无意义的事。然而,它仍需要您充分理解XML以便做一些超出基本的工作(或者甚至理解某些情况下的错误)。这也许是比学习DOM或JDOM接口都更有意义的工作。

  JDOM自身不包含解析器。它通常使用SAX2解析器来解析和验证输入XML文档(尽管它还可以将以前构造的DOM表示作为输入)。它包含一些转换器以将JDOM表示输出成SAX2事件流、DOM模型或XML文本文档。JDOM是在Apache许可证变体下发布的开放源码。

4)DOM4J http://dom4j.sourceforge.net/ 
            
        虽然DOM4J代表了完全独立的开发结果,但最初,它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过DOM4J API和标准DOM接口具有并行访问功能。从2000下半年开始,它就一直处于开发之中。

  为支持所有这些功能,DOM4J使用接口和抽象基本类方法。DOM4J大量使用了API中的Collections类,但是在许多情况下,它还提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是,虽然DOM4J付出了更复杂的API的代价,但是它提供了比JDOM大得多的灵活性。

  在添加灵活性、XPath集成和对大文档处理的目标时,DOM4J的目标与JDOM是一样的:针对Java开发者的易用性和直观操作。它还致力于成为比JDOM更完整的解决方案,实现在本质上处理所有Java/XML问题的目标。在完成该目标时,它比JDOM更少强调防止不正确的应用程序行为。

  DOM4J是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML,特别值得一提的是连Sun的JAXM也在用DOM4J。

2.. 比较

1)DOM4J性能最好,连Sun的JAXM也在用DOM4J。目前许多开源项目中大量采用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J来读取XML配置文件。如果不考虑可移植性,那就采用DOM4J.

2)JDOM和DOM在性能测试时表现不佳,在测试10M文档时内存溢出。在小文档情况下还值得考虑使用DOM和JDOM。虽然JDOM的开发者已经说明他们期望在正式发行版前专注性能问题,但是从性能观点来看,它确实没有值得推荐之处。另外,DOM仍是一个非常好的选择。DOM实现广泛应用于多种编程语言。它还是许多其它与XML相关的标准的基础,因为它正式获得W3C推荐(与基于非标准的Java模型相对),所以在某些类型的项目中可能也需要它(如在JavaScript中使用DOM)。

3)SAX表现较好,这要依赖于它特定的解析方式-事件驱动。一个SAX检测即将到来的XML流,但并没有载入到内存(当然当XML流被读入时,会有部分文档暂时隐藏在内存中)。

3. 四种xml操作方式的基本使用方法

xml文件:

<?xml version="1.0" encoding="utf-8" ?>
<Result>
   <VALUE>
       <NO DATE="2005">A1</NO>
       <ADDR>GZ</ADDR>
   </VALUE>
   <VALUE>
       <NO DATE="2004">A2</NO>
       <ADDR>XG</ADDR>
  </VALUE>
</Result>

1)DOM

import java.io.*;
import java.util.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;

public class MyXMLReader{
 public static void main(String arge[]){

  long lasting =System.currentTimeMillis();
  try{ 
   File f=new File("data_10k.xml");
   DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
   DocumentBuilder builder=factory.newDocumentBuilder();
   Document doc = builder.parse(f);
   NodeList nl = doc.getElementsByTagName("VALUE");
   for (int i=0;i<nl.getLength();i++){
    System.out.print("车牌号码:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue());
    System.out.println("车主地址:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue());
   }
  }catch(Exception e){
   e.printStackTrace();
}

2)SAX

import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;

public class MyXMLReader extends DefaultHandler {

 java.util.Stack tags = new java.util.Stack();
 public MyXMLReader() {
  super();
   }

 public static void main(String args[]) {
  long lasting = System.currentTimeMillis();
  try {
   SAXParserFactory sf = SAXParserFactory.newInstance();
   SAXParser sp = sf.newSAXParser();
   MyXMLReader reader = new MyXMLReader();
   sp.parse(new InputSource("data_10k.xml"), reader);
  } catch (Exception e) {
   e.printStackTrace();
  }

  System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) + "毫秒");}
  public void characters(char ch[], int start, int length) throws SAXException {
  String tag = (String) tags.peek();
  if (tag.equals("NO")) { 
   System.out.print("车牌号码:" + new String(ch, start, length));
    }
    if (tag.equals("ADDR")) {
  System.out.println("地址:" + new String(ch, start, length));
    }
   }

  public void startElement(String uri,String localName,String qName,Attributes attrs) {
  tags.push(qName);}

3) JDOM

import java.io.*;
import java.util.*;
import org.jdom.*;
import org.jdom.input.*;

public class MyXMLReader {

 public static void main(String arge[]) {
  long lasting = System.currentTimeMillis();
  try {
   SAXBuilder builder = new SAXBuilder(); 
   Document doc = builder.build(new File("data_10k.xml")); 
   Element foo = doc.getRootElement(); 
   List allChildren = foo.getChildren(); 
   for(int i=0;i<allChildren.size();i++) { 
    System.out.print("车牌号码:" + ((Element)allChildren.get(i)).getChild("NO").getText());
    System.out.println("车主地址:" + ((Element)allChildren.get(i)).getChild("ADDR").getText());
   }
  } catch (Exception e) {
   e.printStackTrace();
}

}

4)DOM4J

import java.io.*;
import java.util.*;
import org.dom4j.*;
import org.dom4j.io.*;

public class MyXMLReader {

 public static void main(String arge[]) {
  long lasting = System.currentTimeMillis();
  try {
   File f = new File("data_10k.xml");
   SAXReader reader = new SAXReader();
   Document doc = reader.read(f);
   Element root = doc.getRootElement();
   Element foo;
   for (Iterator i = root.elementIterator("VALUE"); i.hasNext();) {
    foo = (Element) i.next();
    System.out.print("车牌号码:" + foo.elementText("NO"));
    System.out.println("车主地址:" + foo.elementText("ADDR"));
   }
  } catch (Exception e) {
   e.printStackTrace();
    }
}

转自:http://blog.chinaunix.net/u/25176/showart_379827.html

posted @ 2009-06-17 11:42 beyond 阅读(232) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2009-06-10 17:38 beyond 阅读(839) | 评论 (0)编辑 收藏

定制的Spring Security(Acegi)的并发会话过滤器(ConcurrentSessionFilter)的编码过程

上一帖述及使用ConcurrentSessionFilter限制同帐号登录多次的方法,同帐号多次登录限制是运行系统必需的功能,所以作者对其深入测试,在上一帖中也列举了Spring Security的ConcurrentSessionFilter和ConcurrentSessionControllerImpl类的几个限制。做一下简单的总结,下面假设同时使用DigestProcessingFilter和辅助类:

  • 如果exceptionIfMaximumExceeded = true,即第二个发起的会话被禁止,如果一个用户重新启动浏览器,再次登录失败,因为前一个会话没有超时,被当成了多次登录。
  • 如果exceptionIfMaximumExceeded = false,如果两个人使用同一个帐号登录,将出现交互将对方踢出去的现象,实际上并没有禁止任何人登录,只是每次要先将另一个人踢下去。


需求

我想使用exceptionIfMaximumExceeded = true,同时允许同一个用户在同一台机器上连续登录多次,我采取了编写定制的ConcurrentSessionController实现类的方法。



原理

ConcurrentSessionController是一个接口,有两个需要实现的方法:checkAuthenticationAllowed()和registerSuccessfulAuthentication(),Spring Security提供了一个实现类ConcurrentSessionControllerImpl,经过分析缺省的实现类,发现方法allowableSessionsExceeded()处理多次并发会话,在SecurityRegistry中保存每个会话的信息,主要是用户帐号对应的会话ID(sessionId)和最后发起时间,在并发发生时,从SecurityRegistry中取出关于某个用户帐号的所有会话,如果exceptionIfMaximumExceeded = false,找到最早一个会话,将其释放掉,腾出空间给新会话,如果exceptionIfMaximumExceeded = true,将发出一个异常。

所以,需要改进allowableSessionsExceeded(),如果exceptionIfMaximumExceeded = true让程序判断客户地址,如果同一个IP,则允许登录,将最早的会话释放掉,如果不是同一个IP在发出异常。

在SecurityRegistry中,用户帐号信息存在一个对象中,名字是principal,当前是一个Object对象,实际上只是存了一个字符串,所以需要扩展principal,写一个定制的类(我的类含有两个属性:username和userip),里面保存客户IP信息。allowableSessionsExceeded()只是使用SecurityRegistry,SecurityRegistry中的内容是由registerSuccessfulAuthentication()方法写入的,所以,在该方法中需要将原来的pricipal对象替换成定制的Principal类的对象。同时checkAuthenticationAllowed()方法也要修改,因为这个方法要查询SecurityRegistry,查询条件替换成定制的Principal类的对象。



注意事项

定制的Principal类要实现equals()和hashCode()和toString()三个方法,在equals()方法中只要username相同就表示两个对象相同,而在hashCode()中只需要将username的hashcode计算在内,因为SecurityRegistry是以principal为关键字的Map容器,这两个方法决定了对Map的查询。toString()方法可以根据自己的需要写,我只是将username输出。



测试

将定制的ConcurrentSessionController对象编制(wire)到应用系统中,经过测试,能够达到预想目的。



存在的问题

原来想省点劲,只要继承ConcurrentSessionControllerImpl并重载上述三个方法就行了,但是不知道为什么securityRegistery属性一直注入不了,一气之下,写了一个直接实现ConcurrentSessionController接口的新类。实际上也不是从头写,将ConcurrentSessionControllerImpl代码改吧该吧即可,用不了几分钟,这就是开源的好处。



    转自 http://www.gooseeker.com/cn/node/517
posted @ 2009-05-08 10:33 beyond 阅读(3305) | 评论 (0)编辑 收藏
/*********************
 * 四舍五入到小数点后两位
燃料子系统有很多数据都要求是固定的格式,并要求四舍五入,一般都是number(12, 2),
如果画面出现数据: 3.1230032..此类可以用myRound(arg1, arg2)处理。
例:
var num = 3.1260032;
var result = myRound(num, 2);    // result = 3.13
 
若num = 1,则结果为1.00
 *********************/
/*
 * 四舍五入到指定位数
 *
 * num 要处理的数字
 * n 小数点后几位
 */
function myRound(num,n){
    var   dd=1;  
    var   tempnum;  
    for(i=0;i<n;i++){  
        dd*=10;
    }  
    tempnum=num*dd;
    
    // 如果参数非数字,将值置为0
    // modified by liyj 2008/6/16 PM
    if (tempnum+""=="NaN") {
        return formatnumber(0,n);  
    }
      
    tempnum=Math.round(tempnum);
    return formatnumber(tempnum/dd,n);  
}  
 /*
  * 格式化数字
  *
  * value  数值
  * num 位数
  */
function formatnumber(value, num) {
    var a, b, c, i;
    a = value.toString();
    b = a.indexOf(".");
    c = a.length;
    if (num == 0) {
        if (b != -1) {
            a = a.substring(0, b);
        }
    } else {
        if (b == -1) {
            a = a + ".";
            for (i = 1; i <= num; i++) {
                a = a + "0";
            }
        } else {
            a = a.substring(0, b + num + 1);
            for (i = c; i <= b + num; i++) {
                a = a + "0";
            }
        }
    }
    return a;
} 
posted @ 2009-03-22 11:28 beyond 阅读(129) | 评论 (0)编辑 收藏

测试….

posted @ 2009-03-22 11:17 beyond 阅读(95) | 评论 (0)编辑 收藏
posted @ 2009-03-22 11:12 beyond 阅读(74) | 评论 (0)编辑 收藏
一、%rowtype只是指明引用的记录的类型,但不保证NOT NULL约束

我们知道使用%type和%rowtype可以分别指定引用的字段、记录类型,但其中有一个特别需要注意的地方:

%type和%rowtype都不保证NOT NULL约束。例如:

DECLARE
  my_empno emp.empno%TYPE;  --emp.empno should not be null
  ...
BEGIN
  my_empno := NULL;  - - this works well

以上这段代码在emp表的empno字段不能为空的情况下依然是可以执行的。


二、%rowtype记录的赋值

用%ROWTYPE作声明的时候是不可以进行初始化赋值的,但是有两种方法可以一次性为所有字段赋值。

方法一:假如两个记录类型的声明引用了同一数据表或游标,那么它们就可以相互赋值,如:

DECLARE
  dept_rec1 dept
%ROWTYPE;
  dept_rec2 dept
%ROWTYPE;
  
CURSOR c1 IS   SELECT * FROM dept;
  dept_rec3 c1
%ROWTYPE;

BEGIN
  .. . 
  dept_rec1 :
= dept_rec2  --this works well

但是,如果一个类型是引用的是数据表而另一个引用的是游标的话,那么,即使它们表现的内容相同,也是不能相互赋值的

dept_rec2 := dept_rec3; - - not allowed

因为此处的dept_rec2引用是表,而dept_rec3引用的是游标,所以即便它们查询的内容一样也

方法二:我们可以使用SELECT或FETCH语句将取得的数据赋给记录。但在表或视图中定义的字段名称顺序要与记录中的名称顺序相同。

DECLARE
  dept_rec dept
%ROWTYPE;
  ...
BEGIN
  
SELECT * INTO dept_rec FROM dept WHERE deptno = 30;
  ...
END

但是,我们不能使用赋值语句来把字段列表中的值赋给记录。所以,下面的语法形式是不允许的:

record_name := (value1, value2, value3, ...); -- not allowed 


 三、
使用别名

从游标中取出的数据,如果游标定义中含有表达式时,我们就需要使用别名才能正确地为%ROWTYPE类型记录赋值:

DECLARE
  
CURSOR my_cursor IS
    
SELECT sal + NVL(comm, 0wages, ename FROM emp;
  my_rec my_cursor
%ROWTYPE;
BEGIN
  
OPEN my_cursor;
  LOOP
    
FETCH my_cursor
      
INTO my_rec;
    
EXIT WHEN my_cursor%NOTFOUND;
    
IF my_rec.wages > 2000 THEN
      
INSERT INTO temp VALUES (NULL, my_rec.wages, my_rec.ename);
    
END IF;
  
END LOOP;
  
CLOSE my_cursor;
END;

 

posted @ 2009-02-25 15:49 beyond 阅读(687) | 评论 (0)编辑 收藏

<html>
<head>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data" name="form1">
<input name="attach" type="file" onchange="javascript:ShowImg(this.value);" onKeyDown="javascript:return(false);" size="20">
<script language="JavaScript">
function ShowImg(src)
{
document.getElementById("imgDiv").innerHTML="图片预览:<br><img id='imgObj' onerror='javascript:GetError()' onload='javascript:GetSize()' src='file:///" + src + "'>";
}
function GetSize()
{
var width,height;
var imgObj=document.getElementById("imgObj");
width=imgObj.width;
height=imgObj.height;
document.getElementById("err_msg").innerHTML="图片大小(宽×高):<font color=red>" + width + "×" + height + "</font>";
if(width>164){
imgObj.width=164;
imgObj.height=imgObj.height/(imgObj.width/164);
}
}
function GetError()
{
document.getElementById("err_msg").innerHTML="图片大小(宽×高):<font color=red>NaN</font>";
document.getElementById("imgDiv").innerHTML="";
document.getElementById("err_msg").innerHTML="图片文件不存在或格式错误!"
}
</script>
<div id="imgDiv" align="center"></div>
<div id="err_msg" align="center"></div>
</form>
</body>
</html>

    申明:此代码来自互联网。

posted @ 2008-12-02 22:05 beyond 阅读(967) | 评论 (0)编辑 收藏

运行
sqlplus回车
longon as sysdba回车
回车
通过上面步骤登陆后修改密码
alter user system identified by pwd
posted @ 2008-11-29 22:40 beyond 阅读(151) | 评论 (0)编辑 收藏

Jsp页面引入js文件注意:

 

  1. 引入的js文件路径要采用绝对路径,在forward的情况下相对路径可能会出错,这是由于jsp页面最终将被便以为servlet,为class,

    这时class的路径与原来js文件的相对路径将有所改变。

  2. 引入的js文件不能识别标签(如:jstl ),如果需要用标签,可以将js文件更改为jspf文件。
posted @ 2008-11-29 00:31 beyond 阅读(116) | 评论 (0)编辑 收藏

始めまして、どうぞよろしくお願いします、まず、自己紹介させていただきます。

      オウセイメイ と申します、二十二歳,湖南省の出身です、今年八月に 中国石油大学に卒業しました、コンピューターの専門です。

      今年三月に 自習生として、新思ソフト会社に入って、電路プロジェクトの電力チームを入って、開発をしています、

今まで、半年となりました。なお、八月に UMLと関連のUMTP資格を取りました。

      得意言語はC++、ジャーバーです、学校に、C++で、軌道交通アナログシステムを開発した、一等賞を得ました。

      対日開発会社の関係ので、入社してから、日本語の勉強を始めました、勉強時間が不足なので、日本語のレベルが下手だと思いますが、

でも日本語システム環境で 仕事をやることができるし、日本仕様書も読めます。日本語が難しいですけど、これから、

全力を入れて、勉強していきたいと思います、ぜひ、機会があれば、日本にいって、勉強したいと思います。

      どうぞよろしくお願いします。

posted @ 2008-11-25 07:38 beyond 阅读(254) | 评论 (0)编辑 收藏
QueryException: ClassNotFoundException
           解决方法:在hibernate.properties上,或是在spring的conext xml中,加上一个属性hibernate.query.factory_class,值为org.hibernate.hql.classic.ClassicQueryTranslatorFactory。

   原因:从网上获知,weblogic.jar中已经有了一个antlr.jar的版本,导致应用中hibernate3.jar中用到的antlr.jar不能找到,导致异常。
   被这个问题缠绕了一整天,使我的OA项目毫无进展,终于解决了~~

hibernate 查询对象为空
    没有主键导致的
    在数据库对应的表中设置主键。

posted @ 2008-11-23 15:05 beyond 阅读(99) | 评论 (0)编辑 收藏

Lazy 只有在session初始化

打开状态下才有效,如果session关闭将报proxy can't initialize错误

Jdk 的代理只能对接口进行代理

Cglib 能对类进行代理。

一级缓存之缓存实体化对象,

Get load iterator save都是用了一级缓存。

一级缓存与session的生命周期是一样的。

二级缓存和sessionFactory的生命周期是一致的。

posted @ 2008-11-10 01:29 beyond 阅读(87) | 评论 (0)编辑 收藏

测试用office2007发日志……

posted @ 2008-11-09 01:11 beyond 阅读(93) | 评论 (0)编辑 收藏
前一段时间有好几个问题,提到怎么判断session是否过期。  
  接触jspo已经很久了,但是还真没有想过这个问题,当时也就没有找到一个满意的答案给人家。  
  当时,我提到一个方法,就是实现HttpSessionListener接口,然后在sessionDestroyed()方法中执行一些操作,表示session要过期了,因为这个方法是session.invalidate()之前监听器调用的方法。这个判断的方法显然不能让人满意。  
  我当时问了些人,但是也没有得到一个准确的答案。  
  正好偶然间看到,request.getSeesion(boolean)方法,一下子让我恍然大悟。这个方法里面传了一个boolean值,这个值如果是true,那么如果当前的request的session不可用,那么就创建新的会话,如果存在就返回当前的会话。如果参数是false,那么在request的当前会话不存在的时候就返回null。  
  这样我们就可以很容易的联想到这个所谓的request的当前会话是否存在和session过期的联系,所以我们就可以“近似地”认为session不存在就是session过期了,那么我们就可以很容易地判断session是否过期了。方法如下:  
  if(request.getSession(false)==null)  
        System.out.println("Session   has   been   invalidated!");  
  else  
        System.out.println("Session   is   active!");  
   
  可能大家注意到我上面有一个“近似地”字眼,也就是说存在特别情况。  
  这个特殊情况就是第一次请求还没有创建会话的时候,那么用这个方法返回的仍然是null,原因我想大家应该是显然的。  
   
  以上是个人拙见,希望大家指正。
原文:http://topic.csdn.net/t/20050225/08/3804877.html
posted @ 2008-07-27 22:44 beyond 阅读(320) | 评论 (0)编辑 收藏
     摘要: <books>   <!--This is a test for dom4j, holen, 2004.9.11-->   <book show="no">        <title>Dom4j Tutorials</title> &nbs...  阅读全文
posted @ 2008-05-14 08:40 beyond 阅读(442) | 评论 (0)编辑 收藏

今天由于项目需要,需将Mysql数据库迁移到Oracle数据库

准备工具

1.连接Mysql 的jdbc 驱动 mysql-connector-java-5.0.4-bin.jar

2.Oracle公司开发的 SQL Developer 1.2

下面就是配置SQL Developer 1.2

配置环境

选择Tools-Preferences -Database-Third Party JDBC Driver 点击 Add Entry 添加Mysql的jdbc 驱动。

配置Mysql 和 Oracle 的连接

点击Connection 右键选择 New Connection 分别建立Mysql 和Oracle连接。

建立好连接后,你就可以查看你得数据库了。

配置Repository

选择 Migration -> Repository Management -> Create Repository 创建 Repository。

两种迁移数据方式:

1. Capture the source database or tables
2. Convert the captured database or tables
3. Generate DDL for the new Oracle schema objects
4. Run the generated DDL script to create the new user and objects
5. Copy any data from the source database to the new database,select Migration->Migration Data select a converted model.

快速迁移:

选择你要迁移的表或数据库,选择Migration -> Quick Migrate

Powered by Zoundry Raven

posted @ 2008-04-05 09:44 beyond 阅读(4409) | 评论 (2)编辑 收藏

在用ssh开发web应用时,需要对生成的各个类文件进行组织,下面就对一个可行的目录方案进行介绍:

譬如应用中有一个用户管理模块,则在公共包下建立一个user包,如该公共包可以为com.simon.oa,

在user包下包括如下子包

1、controler包

该包放置各种struts的action。

 

2、dao包

该包放置各类dao(data access object),也就是放置对数据库访问的实现类,在用myeclipse中的“Hibernate Reverse Engineering”进行反向操作时在某一个目录中就会生成对应某个表的DAO,生成后可将该DAO拖到dao包中。在某些应用中将DAO作为接口,在该接口中包括所有对数据库的操作方法,然后在dao包建立一个hibernate包,在hibernate包中放置对DAO接口的实现,譬如:UserDAO接口有一个实现类为UserDaoImpl,将该类放置到hibernate包中,实际的开发倾向于后一种方式,因为对这个DAO接口可以实现spring的IoC操作。(不知道myeclipse对此是怎么考虑的,这个问题让我纠缠了很久,误将DAO理解成一个能够进行实际操作的类,而不是一个接口,以后开发要注意)

 

3、model包

该包中放置hibernate反向工程生成的bean和该bean对应的.hbm.xml文件。

 

4、service包

该包放置业务操作类,譬如用户服务类,一般情况将该用户操作类提取一个接口,然后在service包下生成一个impl包,在impl包中才放置用户操作接口的实现类。该用户接口实现类中调用DAO接口对数据库进行操作,而调用该实现类的方法在struts的action中。

 

5、vo包(value object)

vo包中的中包括struts中使用的POJO及actionform等信息。

VO:  Value Object
DTO: Data Transfer Object
个人理解VO和DTO是类似的东西,原则上VO和DTO只有Public Fields,主要用于进程之间数据传递的问题,VO和DTO不会传递到表示层,在业务层就会被吸收。但看到很多人在建立VO和DTO时,也含有Setter,Getter属性和一些其它的辅助方法,这也无可厚非,我自己也不能确定这对不对。

posted @ 2008-03-29 18:59 beyond 阅读(2187) | 评论 (0)编辑 收藏

导航

<2008年3月>
2425262728291
2345678
9101112131415
16171819202122
23242526272829
303112345

统计

常用链接

留言簿(1)

随笔档案

相册

搜索

最新评论

  • 1. re: 近期任务
  • 大哥 等着你的drools5翻译呢 drools4把我搞死了 如果你有关于drools4的心得的话请指教 感觉自己使用的不是很好 望赐教 QQ:53816565 谢谢
  • --sunnidy
  • 2. re: Mysql迁移到Oracle
  • 不错,看样子支持大多数数据库迁移到oracle,不知道是否支持从oracle转出?
  • --FastUnit

阅读排行榜

评论排行榜