caoyinghui

模式窗口的使用

<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <script>  //补充完成下边的函数,打开新的一个模式窗口  function openShowModalDialog(){      var obj = window;      var params  = new Array("aaaa",obj);

  var returnValue = window.showModalDialog("DEMO04_01.html",params);

  document.getElementById("showContentDiv").innerHTML=returnValue;

 }

  </script>

</head>

<body>

<h1>模式窗口的使用:</h1> <h3>补充完成openShowModalDialog函数,打开新的一个模式窗口</h3> <button onclick="openShowModalDialog();">打开新的模式窗口</button> <br> <hr> <div id="showContentDiv">

</div>   </body> </html>

DEM004-01.html

<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head>

<script>

 //补充完成函数,将文本框returnValue的值设置为父窗口返回值,并关闭本窗口  function closeShowModalDialog(){        //获得模式窗体的参数。         var p = window.dialogArguments;          window.returnValue=document.getElementById("returnValue").value;      //设置父窗体的返回值 p[1] 事实上是拿到了父窗体的引用      p[1].returnValue=document.getElementById("returnValue").value;

     window.close();  }   </script>

</head>

<body>

<h1>模式窗口的使用:</h1> <h3>补充完成closeShowModalDialog函数,将文本框returnValue的值设置为父窗口返回值,并关闭本窗口</h3> <button onclick="closeShowModalDialog();">设置返回值,并关闭窗口</button> <hr> 窗口的返回值 <input type="text" id="returnValue" value="在这里设置返回值">   </body> </html>

作者:caoyinghui1986 发表于2008-6-15 12:27:00 原文链接
阅读:365 评论:0 查看评论

posted @ 2008-06-15 04:27 shine_panda 阅读(431) | 评论 (0)编辑 收藏

框架中取值问题

DEM003.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

</head>



<frameset rows="70,*" cols="*" framespacing="0" frameborder="yes" style="border:0px">

  <frame src="DEMO03_bar.html" name="bar" scrolling="No" noresize="noresize" id="bar"arginwidth="0" marginheight="0" />

  <frameset cols="150,*" frameborder="yes" border="1" framespacing="0">

    <frame src="DEMO03_menu.html" name="menu" scrolling="No" noresize="noresize" id="menu" marginwidth="0" marginheight="0" />

    <frame src="DEMO03_main.html" name="mainFrame" id="main" marginwidth="0" marginheight="0" />

  </frameset>

</frameset>

<noframes><body>

</body>

</noframes></html>

DEM003_bar.html

<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <script>  //补充完成此函数,用于刷新Menu窗体的页面  function flushMenuFrame(){      //top表示顶级窗口 的 window对象   window.top.menu.location.href="DEMO03_menu.html";  }  

 //补充完成此函数,将barText文本框的值写入到Main窗口的mainText中去。  function writeValueToMainFrame(){      //parent表示 但前窗口的 上级窗口的 window对象        window.parent.mainFrame.document.getElementById("mainText").value=document.getElementById("barText").value;    } </script>

</head>

<body> <center>BAR页面</center> <button onclick="flushMenuFrame();">刷新框架Menu窗口的页面</button> Bar页面的文本框:<input type="text" id="barText" value="Bar页面的值1"><button onclick="writeValueToMainFrame();">向Main窗口写值</button> </body> </html>

DEMO003_main.html

<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> </head>

<body> <center>Main窗体</center> <br><br> Main窗体中的文本框 <input type="text" id="mainText" value="Main页面的值2"> </body> </html>

 

作者:caoyinghui1986 发表于2008-6-15 12:24:00 原文链接
阅读:267 评论:0 查看评论

posted @ 2008-06-15 04:24 shine_panda 阅读(77) | 评论 (0)编辑 收藏

Hibernate向数据库插入图片

实现功能是 用户本地浏览一个图片后(本来要用上传 为简单起见就制作本地测试) 功过Hibernate中向数据库插入图片 并在另一个页面把这个图片显示出来 

index.jsp

<body>
  <form  name="frm" action="imgServlet" method="post">
    <input type="file" name="path"/>
   
    <input type="submit" value="提交">
    </form>
  </body>

一个简单的表单用于浏览图片

Img.java

public class Img  implements java.io.Serializable {


    // Fields   

     private Integer id;
     private byte[] img;

......

}

Img.hbm.xml

<hibernate-mapping>
    <class name="hib.Img" table="img" schema="dbo" >
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="identity" />
        </id>
        <property name="img" type="binary">
            <column name="img" not-null="true" />
        </property>
    </class>
</hibernate-mapping>

 

servlet中的处理方式   (web.xml 中 <url-pattern>/imgServlet</url-pattern> 对这个servlet的配置)

public void doPostt(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  response.setContentType("text/html");
  //PrintWriter out2 = response.getWriter();
  //servlet 中 out 对象只可取一次.
  
  //如果要用与输出二进制数据 . 就必须用 OutputStream 对象.
  
  OutputStream out = response.getOutputStream();
  
  request.setCharacterEncoding("UTF-8");
  String path = request.getParameter("path");
  
  java.io.File file = new File(path);
  
  InputStream inputStream = new FileInputStream(file);
  byte[] buff= new byte[(int) file.length()];
  inputStream.read(buff, 0, (int) file.length());
  
  Img img = new Img();
  img.setImg(buff);
  
  
  Session session  = HibernateSessionFactory.getSession();
  session.save(img);
  session.beginTransaction().commit();
  String realPath = request.getSession().getServletContext().getRealPath("/");
  System.out.println("realPath"+realPath);
  
  System.out.println("path:"+path);
  
 
  System.out.println("插入成功!!!");
  
  try {
  
   //将图片写入到输出流中
   out.write(img.getImg());
  } catch (Exception e) {
   e.printStackTrace();
  }

  //request.getRequestDispatcher("show.jsp").forward(request, response);
  response.sendRedirect("show.jsp");
  out.flush();
  out.close();
  
 }

 

show.jsp

<body>
   <img src="imgServlet"/>
  </body>

 

通过提交就可以在 show.jsp看到用户提交的图片并且改图片保存到了数据库

作者:caoyinghui1986 发表于2008-6-6 14:52:00 原文链接
阅读:475 评论:1 查看评论

posted @ 2008-06-06 06:52 shine_panda 阅读(233) | 评论 (0)编辑 收藏

SSH和Tomcate中连接池的配置方式

每次在CSDN回贴的时候都会遇到好多关于连接池的贴。自己在测试的时候也发现这个东西,有时候确实比较麻烦。干脆就花了一点时间把他们总结了
一下.

我机器的环境是 Eclipse3.2 + tomcate5.5+ JDK1.5 +sqlserver2000
测试前 首先要确保 sql2000 打了spk3,spk4补丁包。


struts中c3p0 连接池的配置。
<data-sources >
   <data-source key="ds" type="com.mchange.v2.c3p0.ComboPooledDataSource">
      <set-property property="driverClassName" value="com.microsoft.jdbc.sqlserver.SQLServerDriver" />
      <set-property property="url" value="jdbc:microsoft:sqlserver://localhost:1433;databasename=pubs" />
      <set-property property="maxCount" value="10"/>
      <set-property property="minCount" value="1"/>
      <set-property property="username" value="sa" />
      <set-property property="password" value="" />  
</data-source>


Action中获得这个连接的方式。
DataSource ds =  this.getDataSource(request,"ds");


struts中dbcp 连接池的配置
    <data-source key="dsDBCP" type="org.apache.commons.dbcp.BasicDataSource">
      <set-property property="driverClassName" value="com.microsoft.jdbc.sqlserver.SQLServerDriver" />
      <set-property property="url" value="jdbc:microsoft:sqlserver://localhost:1433;databasename=pubs" />
      <set-property property="maxCount" value="10"/>
      <set-property property="minCount" value="1"/>
      <set-property property="username" value="sa" />
      <set-property property="password" value="" />  
   </data-source>


使用 dbcp 连接池 时除了要注意 导入必要的 3个连接池驱动包外 还要引入sql的三个驱动包。

 

-------------------------------------------------------------------------------------------------------------------------------
Spring中dbcp 连接池的配置

jdbc.properties


jdbc.driverClassName=com.microsoft.jdbc.sqlserver.SQLServerDriver
jdbc.url=jdbc:microsoft:sqlserver://localhost:1433;databasename=pubs
jdbc.username=sa
jdbc.password=


jdbc.properties 文件来定义连接信息。

在 dbcpPoolBean.xml文件中的bean配置。

<bean id="aa" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <!-- 对与单个文件 这里可以直接用 location属性 然后给一个 value单值 原因是因为在其 父类的实现中
   PropertiesLoaderSupport 有个 setLocation方法.
    public void setLocation(Resource location) {
        this.locations = new Resource[] {location};
       }
     
      public void setLocations(Resource[] locations) {
     this.locations = locations;
          }
       所以单个文件可以简单的用 location对应一个 值(value)
     
      -->
     
     
 
  <property name="locations">
   <list>
    <value>classpath:jdbc.properties</value>
   </list>
  </property>
 </bean>
 
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
  <property name="driverClassName" value="${jdbc.driverClassName}"/>
  <property name="url" value="${jdbc.url}"/>
  <property name="password" value="${jdbc.password}"/>
  <property name="username" value="${jdbc.username}"/>
 </bean>

 

客户段可以通过
  ApplicationContext ctx = new ClassPathXmlApplicationContext("dbcpPoolBean.xml");
  
  DataSource ds =  (org.apache.commons.dbcp.BasicDataSource )ctx.getBean("dataSource");
来获得数据源。当然在web开发中可以通过容器自动注入。

 

----------------------------------------------------------------------------------------------------------------------------

Tocmate5.5中配置数据源:


自己在配置这个东西的时候搞了好久 ,最后还是求助 CSDN解决的
贴子http://topic.csdn.net/u/20080605/20/7fdd0eee-9c43-428a-8b82-5db9a1968151.html
总结下几个需要注意的地方:
1,首先在 tomcate 的server.xml文件中正确配置
2,要将相关的驱动包(sql的和连接池的)copy到 C:/Tomcat 5.5/common/lib(我的tomcate在c盘)

server.xml中的配置信息:

 <Context path="/testPool"
  docBase="F:/Exercise/Newer/tomcatePool/WebRoot"
  debug="5"     
    reloadable="true"
    crossContext="true">
   
   <Resource name="jdbc/userDB"
      auth="Container"   
             type="javax.sql.DataSource"
      factory="org.apache.commons.dbcp.BasicDataSourceFactory"
             username="sa"
             password=""        
             driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"  
             url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs"   
             maxActive="100" 
             maxIdle="1000"
              maxWait="5000"/>   
</Context>

读取连接池的方法:
      try{
     
       Context ctx = new InitialContext();
       DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/userDB");
       //可以获得 ds
       System.out.println(ds);
      
       Connection con = ds.getConnection();
      
       System.out.println("我的到了连接拉:"+con);
       //out.println( ds.getConnection());
       }catch(Exception ex){
      
         ex.printStackTrace();
         
       }

通过这两步配置后你就可以用 http://localhost:8080/testPool/来访问 你的资源 testPool 是你在 <Context path="/testPool"/> 中path的值匹配


如果你吧你的项目部署到tomcate还是不能获得连接。 这是你要在 C:/Tomcat 5.5/conf/Catalina/localhost 下新建一个xml 文件 (tomcatePool.xml)
tomcatePool 是你的当前项目的名字。
这样就可以通过 http://localhost:8080/tomcatePool/ 来访问你的资源了。这时 server.xml文件中就可以不配置。
tomcatePool.xml
 <Context path=""
  docBase=""
  debug="5"     
    reloadable="true"
    crossContext="true">
   
   <Resource name="jdbc/userDB"
    auth="Container"   
           type="javax.sql.DataSource"
           factory="org.apache.commons.dbcp.BasicDataSourceFactory"
           username="sa"
           password=""        
           driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"  
           url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs"   
           maxActive="100" 
           maxIdle="1000"
           maxWait="5000"/>   
</Context>

注意path和docBase 因为是通过项目名来访问的所以这两个值没有意义。


------------------------------------------------------------------------------------------------------------------------------
hibernate 中获得容器(tomcate)中的数据源。

只要加 一个配置。
hibernate.cfg.xml文件

<property name="connection.datasource">java:comp/env/jdbc/userDB</property>

有了这个后
<!-- <property name="connection.username">sa</property>-->
<!-- <property name="connection.url">-->
<!--  jdbc:microsoft:sqlserver://127.0.0.1:1433;databasename=temp-->
<!-- </property>-->
<!-- <property name="myeclipse.connection.profile">sql2000</property>-->
<!-- <property name="connection.driver_class">-->
<!--  com.microsoft.jdbc.sqlserver.SQLServerDriver  -->
<!-- </property>-->

这些就可以注释掉呢。
另外测试中发现 .hbm.xml 文件中的 catalog="temp" 属性可以覆盖 数据源中
 url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs"   这里配置的数据库名称。
 

****************************************************************************************************

目前就只做了这么多 以后遇到了新的再来补充.

 

 

 

 

作者:caoyinghui1986 发表于2008-6-6 14:28:00 原文链接
阅读:1290 评论:3 查看评论

posted @ 2008-06-06 06:28 shine_panda 阅读(230) | 评论 (0)编辑 收藏

Hibernate映射类型对照表

Hibernate映射类型对照表
java类型  Hibernate映射类型  SQL类型
java.math.BigDecimal big_decimal numeric
byte[] binary varbinary(blob)
boolean(java.lang.Boolean) boolean bit
byte(java.lang.Byte) byte  tinyint
java.util.Calendar calendar timestamp
java.sql.Clob clob clob
java.util.Date 或java.sql.Date date date
double(java.lang.Double) double double
float(java.lang.Float) float float
int (java.lang.Integer) integer integer
java.util.Local local varchar
long(java.lang.Long) long bigint
java.io.Serializable的某个实例 serializable varbinary(或blob)
java.lang.String string varchar
java.lang.String text clob
java.util.Date 或 java.sql.Timestamp time timestamp

从书上把这个表抄下来方便以后查阅.

考虑到  操作 blob 的字段太复杂 一个变换的技巧是 . 实体类用 byte[] 类型 ,  hibernate 类型用 binary ,数据库还是用 blob .这样 可以简化一些操作.

作者:caoyinghui1986 发表于2008-6-4 20:56:00 原文链接
阅读:1161 评论:0 查看评论

posted @ 2008-06-04 12:56 shine_panda 阅读(122) | 评论 (0)编辑 收藏

Spring 和struts 整合的三种方式

Spring 和 struts 整合的三种方式。

1,使用Spring 的 ActionSupport
2, 使用Spring 的 DelegatingRequestProcessor 类。
3,全权委托。

无论用那种方法来整合第一步就是要为struts来装载spring的应用环境。 就是在 struts 中加入一个插件。
struts-config.xml中

 <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
  <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>
 </plug-in>


spring 的配置文件被作为参数配置进来。这样可以省略对web.xml 文件中的配置。确保你的applicationContext.xml 在WEB-INF目录下面

1,使用Spring的ActionSupport .
Spring 的ActionSupport 继承至 org.apache.struts.action.Action
ActionSupport的子类可以或得 WebApplicationContext类型的全局变量。通过getWebApplicationContext()可以获得这个变量。

这是一个 servlet 的代码:
public class LoginAction extends org.springframework.web.struts.ActionSupport {
 
 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
                //获得  WebApplicationContext  对象             
  WebApplicationContext ctx = this.getWebApplicationContext();
  
  LoginDao dao = (LoginDao) ctx.getBean("loginDao");
  User u = new User();
  
  u.setName(loginForm.getName());
  u.setPwd(loginForm.getPwd());
  
  
  if(dao.checkLogin(u)){
   return mapping.findForward("success");
  }else{
   return  mapping.findForward("error");
  }
  
 }
}

applicationContext.xml 中的配置
<beans>
 <bean id="loginDao" class="com.cao.dao.LoginDao"/>
</beans>

这中配置方式同直接在web.xml文件配置差别不大。注意:Action继承自 org.springframework.web.struts.ActionSupport 使得struts和spring耦合在一起。
但实现了表示层和业务逻辑层的解耦(LoginDao dao = (LoginDao) ctx.getBean("loginDao"))。


2,使用Spring 的 DelegatingRequestProcessor 类
DelegatingRequestProcessor  继承自 org.apache.struts.action.RequestProcessor 并覆盖了里面的方法。
sturts-config.xml  中  <controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/> 通过 <controller >来替代
                        org.apache.struts.action.RequestProcessor 的请求处理。

public class LoginAction extends Action {
 //利用spring来注入这个对象。
 private LoginDao dao ;
 
 public void setDao(LoginDao dao) {
  System.out.println("执行注入");
  this.dao = dao;
 }

 public LoginDao getDao() {
  return dao;
 }

 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
  //这样一改这行代码似乎没有必要了。
  //WebApplicationContext ctx = this.getWebApplicationContext();
  //LoginDao dao = (LoginDao) ctx.getBean("loginDao");
 
  User u = new User();
  
  u.setName(loginForm.getName());
  u.setPwd(loginForm.getPwd());
  
  //直接用dao来调用spring会将这个对象实例化。
  if(dao.checkLogin(u)){
   return mapping.findForward("success");
  }else{
   return  mapping.findForward("error");
  }
  
 }
}
这里的。
LoginAction extends Action 说明 struts 每有和spring 耦合。
看一下
applicationContext.xml 中的配置。
<beans>
 <bean id="loginDao" class="com.cao.dao.LoginDao"/>
 
 <bean name="/login" class="com.cao.struts.action.LoginAction">
  <property name="dao">
   <ref local="loginDao"/>
  </property>
 </bean>
</beans>

这里 name="/login" 与struts 中的path匹配
    class="com.cao.struts.action.LoginAction" 与struts 中的type匹配

还要为 LoginAction 提供必要的setXXX方法。 获得ApplicationCotext和依赖注入的工作都在DelegatingRequestProcessor中完成。


3,全权委托:
Action 的创建和对象的依赖注入全部由IOC容器来完成。 使用Spring的DelegatingAcionProxy来帮助实现代理的工作
org.springframework.web.struts.DelegatingActiongProxy继承于org.apache.struts.action.Action .


全权委托的配置方式同 方式 2 类似 (applcationContext.xml文件的配置和 Action类的实现方式相同)。
<struts-config>
  <data-sources />
  <form-beans >
    <form-bean name="loginForm" type="com.cao.struts.form.LoginForm" />

  </form-beans>

  <global-exceptions />
  <global-forwards />
 <action-mappings >
    <!-- type指向的是spring 的代理类 -->
    <action
      attribute="loginForm"
      input="login.jsp"
      name="loginForm"
      path="/login"
      scope="request"

      type="org.springframework.web.struts.DelegatingActionProxy" >
     
      <forward name="success" path="/ok.jsp" />
      <forward name="error" path="/error.jsp" />
    </action>
 
 </action-mappings>
 
  
  <message-resources parameter="com.cao.struts.ApplicationResources" />

 <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
  <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>
 </plug-in>

</struts-config>
不同之处
1, <action>中 type指向的是spring 的代理类

2, 去掉struts-config.xml中 <controller >

 

三种整和方式中我们优先选用 全权委托的方式。
理由:
1,第一种使得过多的耦合了Spring和Action .
2,RequestProcessor类已经被代理 如果要再实现自己的实现方式(如:编码处理)怕有点麻烦。

总结一下:
整合工作中的步骤:
1,修改struts-config.xml  
2, 配置applicationContext.xml
3, 为Action添加get/set方法 来获得依赖注入的功能。

 


作者:caoyinghui1986 发表于2008-6-2 6:16:00 原文链接
阅读:5901 评论:6 查看评论

posted @ 2008-06-01 22:16 shine_panda 阅读(97) | 评论 (0)编辑 收藏

WEB中加载ApplicationContext的两种方式

1,通过Listener加载ApplicationContext

 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/applicationContext.xml</param-value>
 </context-param>
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>

-----------------------------------------------------------------------------------------------------------------------------------------

通过Servlet加载ApplicationContext

       <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/applicationContext.xml</param-value>
 </context-param>
 
 <servlet>
  <servlet-name>SpringContextServlet</servlet-name>
  <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>

-------------------------------------------------------------------------------------------------------------------------------------------

两种加载方式中要特别注意 路径问题。
<param-value>/WEB-INF/applicationContext.xml</param-value>
其中要确保你的 WEB-INF 下 有 applicationContext.xml 这个文件
测试发现WEB-INF区分大小写。 空格好象没有发现问题。
Listener 接口 是在  servelt2.3 版本被引入的 我机器的配置是Eclipse3.2 +Tomcate5.0+JDK1.5
使用这个没有问题。
还有一个 applicationContext.xml 如果放在 WEB-INF目录外似乎在这里
哪怕是改成相应的路径好象也访问不到。
servlet中可以通过
ApplicationContext context = org.springframework.web.context.support.WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
得到 context 对象。

 

作者:caoyinghui1986 发表于2008-6-1 15:52:00 原文链接
阅读:492 评论:4 查看评论

posted @ 2008-06-01 07:52 shine_panda 阅读(155) | 评论 (0)编辑 收藏

js日历控件

calendar.js
 
--------------------------------------------------------------------------------

<!--
document.write("<div id=meizzCalendarLayer style='position: absolute; z-index: 9999; width: 144; height: 193; display: none'>");
document.write("<iframe name=meizzCalendarIframe scrolling=no frameborder=0 width=100% height=100%></iframe></div>");
function writeIframe()
{
    var strIframe = "<html><head><meta http-equiv='Content-Type' content='text/html; charset=gb2312'><style>"+
    "*{font-size: 12px; font-family: 宋体}"+
    ".bg{  color: "+ WebCalendar.lightColor +"; cursor: default; background-color: "+ WebCalendar.darkColor +";}"+
    "table#tableMain{ width: 142; height: 180;}"+
    "table#tableWeek td{ color: "+ WebCalendar.lightColor +";}"+
    "table#tableDay  td{ font-weight: bold;}"+
    "td#meizzYearHead, td#meizzYearMonth{color: "+ WebCalendar.wordColor +"}"+
    ".out { text-align: center; border-top: 1px solid "+ WebCalendar.DarkBorder +"; border-left: 1px solid "+ WebCalendar.DarkBorder +";"+
    "border-right: 1px solid "+ WebCalendar.lightColor +"; border-bottom: 1px solid "+ WebCalendar.lightColor +";}"+
    ".over{ text-align: center; border-top: 1px solid #FFFFFF; border-left: 1px solid #FFFFFF;"+
    "border-bottom: 1px solid "+ WebCalendar.DarkBorder +"; border-right: 1px solid "+ WebCalendar.DarkBorder +"}"+
    "input{ border: 1px solid "+ WebCalendar.darkColor +"; padding-top: 1px; height: 18; cursor: hand;"+
    "       color:"+ WebCalendar.wordColor +"; background-color: "+ WebCalendar.btnBgColor +"}"+
    "</style></head><body onselectstart='return false' style='margin: 0px' oncontextmenu='return false'><form name=meizz>";

    if (WebCalendar.drag){ strIframe += "<scr"+"ipt language=javascript>"+
    "var drag=false, cx=0, cy=0, o = parent.WebCalendar.calendar; function document.onmousemove(){"+
    "if(parent.WebCalendar.drag && drag){if(o.style.left=='')o.style.left=0; if(o.style.top=='')o.style.top=0;"+
    "o.style.left = parseInt(o.style.left) + window.event.clientX-cx;"+
    "o.style.top  = parseInt(o.style.top)  + window.event.clientY-cy;}}"+
    "function document.onkeydown(){ switch(window.event.keyCode){  case 27 : parent.hiddenCalendar(); break;"+
    "case 37 : parent.prevM(); break; case 38 : parent.prevY(); break; case 39 : parent.nextM(); break; case 40 : parent.nextY(); break;"+
    "case 84 : document.forms[0].today.click(); break;} window.event.keyCode = 0; window.event.returnValue= false;}"+
    "function dragStart(){cx=window.event.clientX; cy=window.event.clientY; drag=true;}</scr"+"ipt>"}

    strIframe += "<select name=tmpYearSelect  onblur='parent.hiddenSelect(this)' style='z-index:1;position:absolute;top:3;left:18;display:none'"+
    " onchange='parent.WebCalendar.thisYear =this.value; parent.hiddenSelect(this); parent.writeCalendar();'></select>"+
    "<select name=tmpMonthSelect onblur='parent.hiddenSelect(this)' style='z-index:1; position:absolute;top:3;left:74;display:none'"+
    " onchange='parent.WebCalendar.thisMonth=this.value; parent.hiddenSelect(this); parent.writeCalendar();'></select>"+

    "<table id=tableMain class=bg border=0 cellspacing=2 cellpadding=0>"+
    "<tr><td width=140 height=19 bgcolor='"+ WebCalendar.lightColor +"'>"+
    "    <table width=140 id=tableHead border=0 cellspacing=1 cellpadding=0><tr align=center>"+
    "    <td width=15 height=19 class=bg title='向前翻 1 月&#13;快捷键:←' style='cursor: hand' onclick='parent.prevM()'><b>&lt;</b></td>"+
    "    <td width=60 id=meizzYearHead  title='点击此处选择年份' onclick='parent.funYearSelect(parseInt(this.innerText, 10))'"+
    "        onmouseover='this.bgColor=parent.WebCalendar.darkColor; this.style.color=parent.WebCalendar.lightColor'"+
    "        onmouseout='this.bgColor=parent.WebCalendar.lightColor; this.style.color=parent.WebCalendar.wordColor'></td>"+
    "    <td width=50 id=meizzYearMonth title='点击此处选择月份' onclick='parent.funMonthSelect(parseInt(this.innerText, 10))'"+
    "        onmouseover='this.bgColor=parent.WebCalendar.darkColor; this.style.color=parent.WebCalendar.lightColor'"+
    "        onmouseout='this.bgColor=parent.WebCalendar.lightColor; this.style.color=parent.WebCalendar.wordColor'></td>"+
    "    <td width=15 class=bg title='向后翻 1 月&#13;快捷键:→' onclick='parent.nextM()' style='cursor: hand'><b>&gt;</b></td></tr></table>"+
    "</td></tr><tr><td height=20><table id=tableWeek border=1 width=140 cellpadding=0 cellspacing=0 ";
    if(WebCalendar.drag){strIframe += "onmousedown='dragStart()' onmouseup='drag=false' onmouseout='drag=false'";}
    strIframe += " borderColorLight='"+ WebCalendar.darkColor +"' borderColorDark='"+ WebCalendar.lightColor +"'>"+
    "    <tr align=center><td height=20>日</td><td>一</td><td>二</td><td>三</td><td>四</td><td>五</td><td>六</td></tr></table>"+
    "</td></tr><tr><td valign=top width=140 bgcolor='"+ WebCalendar.lightColor +"'>"+
    "    <table id=tableDay height=120 width=140 border=0 cellspacing=1 cellpadding=0>";
         for(var x=0; x<5; x++){ strIframe += "<tr>";
         for(var y=0; y<7; y++)  strIframe += "<td class=out id='meizzDay"+ (x*7+y) +"'></td>"; strIframe += "</tr>";}
         strIframe += "<tr>";
         for(var x=35; x<39; x++) strIframe += "<td class=out id='meizzDay"+ x +"'></td>";
         strIframe +="<td colspan=3 class=out title='"+ WebCalendar.regInfo +"'><input style=' background-color: "+
         WebCalendar.btnBgColor +";cursor: hand; padding-top: 4px; width: 100%; height: 100%; border: 0' onfocus='this.blur()'"+
         " type=button value='&nbsp; &nbsp; 关闭' onclick='parent.hiddenCalendar()'></td></tr></table>"+
    "</td></tr><tr><td height=20 width=140 bgcolor='"+ WebCalendar.lightColor +"'>"+
    "    <table border=0 cellpadding=1 cellspacing=0 width=140>"+
    "    <tr><td><input name=prevYear title='向前翻 1 年&#13;快捷键:↑' onclick='parent.prevY()' type=button value='&lt;&lt;'"+
    "    onfocus='this.blur()' style='meizz:expression(this.disabled=parent.WebCalendar.thisYear==1000)'><input"+
    "    onfocus='this.blur()' name=prevMonth title='向前翻 1 月&#13;快捷键:←' onclick='parent.prevM()' type=button value='&lt;&nbsp;'>"+
    "    </td><td align=center><input name=today type=button value='Today' onfocus='this.blur()' style='width: 50' title='当前日期&#13;快捷键:T'"+
    "    onclick=/"parent.returnDate(new Date().getDate() +'/'+ (new Date().getMonth() +1) +'/'+ new Date().getFullYear())/">"+
    "    </td><td align=right><input title='向后翻 1 月&#13;快捷键:→' name=nextMonth onclick='parent.nextM()' type=button value='&nbsp;&gt;'"+
    "    onfocus='this.blur()'><input name=nextYear title='向后翻 1 年&#13;快捷键:↓' onclick='parent.nextY()' type=button value='&gt;&gt;'"+
    "    onfocus='this.blur()' style='meizz:expression(this.disabled=parent.WebCalendar.thisYear==9999)'></td></tr></table>"+
    "</td></tr><table></form></body></html>";
    with(WebCalendar.iframe)
    {
        document.writeln(strIframe); document.close();
        for(var i=0; i<39; i++)
        {
            WebCalendar.dayObj[i] = eval("meizzDay"+ i);
            WebCalendar.dayObj[i].onmouseover = dayMouseOver;
            WebCalendar.dayObj[i].onmouseout  = dayMouseOut;
            WebCalendar.dayObj[i].onclick     = returnDate;
        }
    }
}
function WebCalendar() //初始化日历的设置
{
    this.regInfo    = "WEB Calendar ver 3.0&#13;作者:meizz(梅花雪疏影横斜)&#13;网站:http://www.meizz.com/&#13;关闭的快捷键:[Esc]";
    this.regInfo   += "&#13;&#13;Ver 2.0:walkingpoison(水晶龙)&#13;Ver 1.0:meizz(梅花雪疏影横斜)";
    this.daysMonth  = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    this.day        = new Array(39);            //定义日历展示用的数组
    this.dayObj     = new Array(39);            //定义日期展示控件数组
    this.dateStyle  = null;                     //保存格式化后日期数组
    this.objExport  = null;                     //日历回传的显示控件
    this.eventSrc   = null;                     //日历显示的触发控件
    this.inputDate  = null;                     //转化外的输入的日期(d/m/yyyy)
    this.thisYear   = new Date().getFullYear(); //定义年的变量的初始值
    this.thisMonth  = new Date().getMonth()+ 1; //定义月的变量的初始值
    this.thisDay    = new Date().getDate();     //定义日的变量的初始值
    this.today      = this.thisDay +"/"+ this.thisMonth +"/"+ this.thisYear;   //今天(d/m/yyyy)
    this.iframe     = window.frames("meizzCalendarIframe"); //日历的 iframe 载体
    this.calendar   = getObjectById("meizzCalendarLayer");  //日历的层
    this.dateReg    = "";           //日历格式验证的正则式

    this.yearFall   = 50;           //定义年下拉框的年差值
    this.format     = "yyyy-mm-dd"; //回传日期的格式
    this.timeShow   = false;        //是否返回时间
    this.drag       = true;         //是否允许拖动
    this.darkColor  = "#FF6347";    //控件的暗色
    this.lightColor = "#FFFFFF";    //控件的亮色
    this.btnBgColor = "#FFF5A0";    //控件的按钮背景色
    this.wordColor  = "#000040";    //控件的文字颜色
    this.wordDark   = "#DCDCDC";    //控件的暗文字颜色
    this.dayBgColor = "#FFFACD";    //日期数字背景色
    this.todayColor = "#FF9933";    //今天在日历上的标示背景色
    this.DarkBorder = "#FFE4C4";    //日期显示的立体表达色
}   var WebCalendar = new WebCalendar();

function calendar() //主调函数
{
    var e = window.event.srcElement;   writeIframe();
    var o = WebCalendar.calendar.style; WebCalendar.eventSrc = e;
 if (arguments.length == 0) WebCalendar.objExport = e;
    else WebCalendar.objExport = eval(arguments[0]);

    WebCalendar.iframe.tableWeek.style.cursor = WebCalendar.drag ? "move" : "default";
 var t = e.offsetTop,  h = e.clientHeight, l = e.offsetLeft, p = e.type;
 while (e = e.offsetParent){t += e.offsetTop; l += e.offsetLeft;}
    o.display = ""; WebCalendar.iframe.document.body.focus();
    var cw = WebCalendar.calendar.clientWidth, ch = WebCalendar.calendar.clientHeight;
    var dw = document.body.clientWidth, dl = document.body.scrollLeft, dt = document.body.scrollTop;
   
    if (document.body.clientHeight + dt - t - h >= ch) o.top = (p=="image")? t + h : t + h + 6;
    else o.top  = (t - dt < ch) ? ((p=="image")? t + h : t + h + 6) : t - ch;
    if (dw + dl - l >= cw) o.left = l; else o.left = (dw >= cw) ? dw - cw + dl : dl;

    if  (!WebCalendar.timeShow) WebCalendar.dateReg = /^(/d{1,4})(-|//|.)(/d{1,2})/2(/d{1,2})$/;
    else WebCalendar.dateReg = /^(/d{1,4})(-|//|.)(/d{1,2})/2(/d{1,2}) (/d{1,2}):(/d{1,2}):(/d{1,2})$/;

    try{
        if (WebCalendar.objExport.value.trim() != ""){
            WebCalendar.dateStyle = WebCalendar.objExport.value.trim().match(WebCalendar.dateReg);
            if (WebCalendar.dateStyle == null)
            {
                WebCalendar.thisYear   = new Date().getFullYear();
                WebCalendar.thisMonth  = new Date().getMonth()+ 1;
                WebCalendar.thisDay    = new Date().getDate();
                alert("原文本框里的日期有错误!/n可能与你定义的显示时分秒有冲突!");
                writeCalendar(); return false;
            }
            else
            {
                WebCalendar.thisYear   = parseInt(WebCalendar.dateStyle[1], 10);
                WebCalendar.thisMonth  = parseInt(WebCalendar.dateStyle[3], 10);
                WebCalendar.thisDay    = parseInt(WebCalendar.dateStyle[4], 10);
                WebCalendar.inputDate  = parseInt(WebCalendar.thisDay, 10) +"/"+ parseInt(WebCalendar.thisMonth, 10) +"/"+
                parseInt(WebCalendar.thisYear, 10); writeCalendar();
            }
        }  else writeCalendar();
    }  catch(e){writeCalendar();}
}
function funMonthSelect() //月份的下拉框
{
    var m = isNaN(parseInt(WebCalendar.thisMonth, 10)) ? new Date().getMonth() + 1 : parseInt(WebCalendar.thisMonth);
    var e = WebCalendar.iframe.document.forms[0].tmpMonthSelect;
    for (var i=1; i<13; i++) e.options.add(new Option(i +"月", i));
    e.style.display = ""; e.value = m; e.focus(); window.status = e.style.top;
}
function funYearSelect() //年份的下拉框
{
    var n = WebCalendar.yearFall;
    var e = WebCalendar.iframe.document.forms[0].tmpYearSelect;
    var y = isNaN(parseInt(WebCalendar.thisYear, 10)) ? new Date().getFullYear() : parseInt(WebCalendar.thisYear);
        y = (y <= 1000)? 1000 : ((y >= 9999)? 9999 : y);
    var min = (y - n >= 1000) ? y - n : 1000;
    var max = (y + n <= 9999) ? y + n : 9999;
        min = (max == 9999) ? max-n*2 : min;
        max = (min == 1000) ? min+n*2 : max;
    for (var i=min; i<=max; i++) e.options.add(new Option(i +"年", i));
    e.style.display = ""; e.value = y; e.focus();
}
function prevM()  //往前翻月份
{
    WebCalendar.thisDay = 1;
    if (WebCalendar.thisMonth==1)
    {
        WebCalendar.thisYear--;
        WebCalendar.thisMonth=13;
    }
    WebCalendar.thisMonth--; writeCalendar();
}
function nextM()  //往后翻月份
{
    WebCalendar.thisDay = 1;
    if (WebCalendar.thisMonth==12)
    {
        WebCalendar.thisYear++;
        WebCalendar.thisMonth=0;
    }
    WebCalendar.thisMonth++; writeCalendar();
}
function prevY(){WebCalendar.thisDay = 1; WebCalendar.thisYear--; writeCalendar();}//往前翻 Year
function nextY(){WebCalendar.thisDay = 1; WebCalendar.thisYear++; writeCalendar();}//往后翻 Year
function hiddenSelect(e){for(var i=e.options.length; i>-1; i--)e.options.remove(i); e.style.display="none";}
function getObjectById(id){ if(document.all) return(eval("document.all."+ id)); return(eval(id)); }
function hiddenCalendar(){getObjectById("meizzCalendarLayer").style.display = "none";};
function appendZero(n){return(("00"+ n).substr(("00"+ n).length-2));}//日期自动补零程序
function String.prototype.trim(){return this.replace(/(^/s*)|(/s*$)/g,"");}
function dayMouseOver()
{
    this.className = "over";
    this.style.backgroundColor = WebCalendar.darkColor;
    if(WebCalendar.day[this.id.substr(8)].split("/")[1] == WebCalendar.thisMonth)
    this.style.color = WebCalendar.lightColor;
}
function dayMouseOut()
{
    this.className = "out"; var d = WebCalendar.day[this.id.substr(8)], a = d.split("/");
    this.style.removeAttribute('backgroundColor');
    if(a[1] == WebCalendar.thisMonth && d != WebCalendar.today)
    {
        if(WebCalendar.dateStyle && a[0] == parseInt(WebCalendar.dateStyle[4], 10))
        this.style.color = WebCalendar.lightColor;
        this.style.color = WebCalendar.wordColor;
    }
}
function writeCalendar() //对日历显示的数据的处理程序
{
    var y = WebCalendar.thisYear;
    var m = WebCalendar.thisMonth;
    var d = WebCalendar.thisDay;
    WebCalendar.daysMonth[1] = (0==y%4 && (y%100!=0 || y%400==0)) ? 29 : 28;
    if (!(y<=9999 && y >= 1000 && parseInt(m, 10)>0 && parseInt(m, 10)<13 && parseInt(d, 10)>0)){
        alert("对不起,你输入了错误的日期!");
        WebCalendar.thisYear   = new Date().getFullYear();
        WebCalendar.thisMonth  = new Date().getMonth()+ 1;
        WebCalendar.thisDay    = new Date().getDate(); }
    y = WebCalendar.thisYear;
    m = WebCalendar.thisMonth;
    d = WebCalendar.thisDay;
    WebCalendar.iframe.meizzYearHead.innerText  = y +" 年";
    WebCalendar.iframe.meizzYearMonth.innerText = parseInt(m, 10) +" 月";
    WebCalendar.daysMonth[1] = (0==y%4 && (y%100!=0 || y%400==0)) ? 29 : 28; //闰年二月为29天
    var w = new Date(y, m-1, 1).getDay();
    var prevDays = m==1  ? WebCalendar.daysMonth[11] : WebCalendar.daysMonth[m-2];
    for(var i=(w-1); i>=0; i--) //这三个 for 循环为日历赋数据源(数组 WebCalendar.day)格式是 d/m/yyyy
    {
        WebCalendar.day[i] = prevDays +"/"+ (parseInt(m, 10)-1) +"/"+ y;
        if(m==1) WebCalendar.day[i] = prevDays +"/"+ 12 +"/"+ (parseInt(y, 10)-1);
        prevDays--;
    }
    for(var i=1; i<=WebCalendar.daysMonth[m-1]; i++) WebCalendar.day[i+w-1] = i +"/"+ m +"/"+ y;
    for(var i=1; i<39-w-WebCalendar.daysMonth[m-1]+1; i++)
    {
        WebCalendar.day[WebCalendar.daysMonth[m-1]+w-1+i] = i +"/"+ (parseInt(m, 10)+1) +"/"+ y;
        if(m==12) WebCalendar.day[WebCalendar.daysMonth[m-1]+w-1+i] = i +"/"+ 1 +"/"+ (parseInt(y, 10)+1);
    }
    for(var i=0; i<39; i++)    //这个循环是根据源数组写到日历里显示
    {
        var a = WebCalendar.day[i].split("/");
        WebCalendar.dayObj[i].innerText    = a[0];
        WebCalendar.dayObj[i].title        = a[2] +"-"+ appendZero(a[1]) +"-"+ appendZero(a[0]);
        WebCalendar.dayObj[i].bgColor      = WebCalendar.dayBgColor;
        WebCalendar.dayObj[i].style.color  = WebCalendar.wordColor;
        if ((i<10 && parseInt(WebCalendar.day[i], 10)>20) || (i>27 && parseInt(WebCalendar.day[i], 10)<12))
            WebCalendar.dayObj[i].style.color = WebCalendar.wordDark;
        if (WebCalendar.inputDate==WebCalendar.day[i])    //设置输入框里的日期在日历上的颜色
        {WebCalendar.dayObj[i].bgColor = WebCalendar.darkColor; WebCalendar.dayObj[i].style.color = WebCalendar.lightColor;}
        if (WebCalendar.day[i] == WebCalendar.today)      //设置今天在日历上反应出来的颜色
        {WebCalendar.dayObj[i].bgColor = WebCalendar.todayColor; WebCalendar.dayObj[i].style.color = WebCalendar.lightColor;}
    }
}
function returnDate() //根据日期格式等返回用户选定的日期
{
    if(WebCalendar.objExport)
    {
        var returnValue;
        var a = (arguments.length==0) ? WebCalendar.day[this.id.substr(8)].split("/") : arguments[0].split("/");
        var d = WebCalendar.format.match(/^(/w{4})(-|//|.|)(/w{1,2})/2(/w{1,2})$/);
        if(d==null){alert("你设定的日期输出格式不对!/r/n/r/n请重新定义 WebCalendar.format !"); return false;}
        var flag = d[3].length==2 || d[4].length==2; //判断返回的日期格式是否要补零
        returnValue = flag ? a[2] +d[2]+ appendZero(a[1]) +d[2]+ appendZero(a[0]) : a[2] +d[2]+ a[1] +d[2]+ a[0];
        if(WebCalendar.timeShow)
        {
            var h = new Date().getHours(), m = new Date().getMinutes(), s = new Date().getSeconds();
            returnValue += flag ? " "+ appendZero(h) +":"+ appendZero(m) +":"+ appendZero(s) : " "+  h  +":"+ m +":"+ s;
        }
        WebCalendar.objExport.value = returnValue;
        hiddenCalendar();
    }
}
function document.onclick()
{
    if(WebCalendar.eventSrc != window.event.srcElement) hiddenCalendar();
}
//-->

----------------------------------------------------------------------------------------------------------------------------------------------

<SCRIPT LANGUAGE="JavaScript" src="calendar.js"></SCRIPT>
在你的页面中引入 这个 js 文件
通过onfocus来调用并显示日历
<input type="text" onfocus="calendar()" name="xxx">
当把一个带中文的js文件考到Eclipse工程时候会报编码错误这是 需要点右键 属性 更改编码。然后粘贴就可以
如果粘贴出现乱码  http://d.download.csdn.net/down/476931/caoyinghui1986 
有完整的JS文件 js文件中出错的地方可以用 <!-- --> 注释. (JBuilder2005不报错 ,Eclipse好象有这个问题)
注释 后就没有事情了。
 
 
 
作者:caoyinghui1986 发表于2008-5-31 17:56:00 原文链接
阅读:907 评论:2 查看评论

posted @ 2008-05-31 09:56 shine_panda 阅读(1185) | 评论 (0)编辑 收藏

合并连续数字的算法

public class Test {
	public static void main(String[] args) {
		String str = new String(
				"1,2,3,4,5,6,7,8,9,11,13,14,1000,1001,1002,1003");
		String[] s = str.split(",");
		int[] num = new int[s.length];
		String result = "";
		for (int i = 0; i < s.length; i++) {
			num[i] = Integer.parseInt(s[i]);
		}
		for (int i = 0; i < num.length; i++) {
			if (i == 0) {
				result = "" + num[i];
			} else if (i == num.length - 1) {
				if (num[i] - num[i - 1] == 1) {
					result = result + "-" + num[i];
				} else {
					result = result + "," + num[i];
				}
			} else {
				if ((num[i] - num[i - 1] == 1) && (num[i + 1] - num[i] == 1)) {
					continue;
				}
				if ((num[i] - num[i - 1] == 1) && (num[i + 1] - num[i] != 1)) {
					result = result + "-" + num[i];
				}
				if ((num[i] - num[i - 1] != 1)) {
					result = result + "," + num[i];
				}

			}

		}
		System.out.println(result);
	}
}
作者:caoyinghui1986 发表于2008-5-31 14:11:00 原文链接
阅读:288 评论:1 查看评论

posted @ 2008-05-31 06:11 shine_panda 阅读(257) | 评论 (0)编辑 收藏

Sping中自定义属性编辑器

Spring通过PropertyEdit(属性编辑器) 可以将字符串转换为真实类型。通过CustomEditorConfigurer ,ApplicationContext 可以很方便的支持自定义
PropertyEdit。


MyType.java

package com.cao.spring.applicationContext;

public class MyType {
 private String text;
 
 public MyType(String text){
  this.text = text;
 }
 
 public String getText(){
  return this.text;
 }
}
 
 
DependsOnType.java
 
package com.cao.spring.applicationContext;

public class DependsOnType {
 private MyType type;

 public MyType getType() {
  return type;
 }

 public void setType(MyType type) {
  this.type = type;
 }
 
}
 
//自定义的属性编辑器MyTypeEdit.java
 
package com.cao.spring.applicationContext;

public class MyTypeEdit extends java.beans.PropertyEditorSupport{
 //提供一种对字符串的转换策略
 private String format;
 
 
 public String getFormat() {
  return format;
 }


 public void setFormat(String format) {
  this.format = format;
 }


 //覆盖父类(PropertyEditorSupport)的setAsText方法。
  public void setAsText(String text) {
   if(format!=null && format.equals("upperCase")){
    System.out.println("修改前的样子:"+text);
    text=text.toUpperCase();
   }
  
  //获得编辑前的类型
   System.out.println("获得编辑前的类型 "+text.getClass().getSimpleName());
  //包装成真实类型
   MyType type = new MyType(text);
  //注入包装后的类型
   setValue(type); 
    }
}

 

 
配置bean   propertyEdit.xml

 
<beans>
   <bean id="myBean" class="com.cao.spring.applicationContext.DependsOnType">
   <!-- type的真实类型是 MyType 但这里指定的是一个普通的String --> 
       <property name="type">
           <value>abc</value>
      </property>
    </bean>
</beans>

 

 
将属性编辑器配置进来 plugin.xml
<bean id="aaa" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
      <property name="customEditors">  
          <map>       <!-- key指定了转换后的类型 -->  
    <entry key="com.cao.spring.applicationContext.MyType">   
              <!-- 内部bean 配置了自定义的属性编辑器 -->  
             <bean class="com.cao.spring.applicationContext.MyTypeEdit">     
               <!-- 配置字符串的转换策略 -->    
             <property name="format" value="upperCase"/>  
            </bean>  
         </entry>  
          </map> 
      </property>
</bean>


 
测试类:
public class MyEditorTest {
 public static void main(String[] args) {
  ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"application/plugin.xml","application/propertyEdit.xml"});
  DependsOnType type=  (DependsOnType) ctx.getBean("myBean");
  System.out.println(type.getType().getClass().getSimpleName());
  System.out.println(type.getType().getText());
 }
}
 
//输出结果:
修改前的样子:abc获得编辑前的类型 StringMyTypeABC

 

作者:caoyinghui1986 发表于2008-5-30 20:44:00 原文链接
阅读:311 评论:0 查看评论

posted @ 2008-05-30 12:44 shine_panda 阅读(121) | 评论 (0)编辑 收藏

仅列出标题
共3页: 上一页 1 2 3 
<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

常用链接

留言簿

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜