只言片语

posts(4) comments(3) trackbacks(0)
  • BlogJava
  • 联系
  • RSS 2.0 Feed 聚合
  • 管理

常用链接

  • 我的随笔
  • 我的评论
  • 我的参与
  • 最新评论

留言簿

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔分类

  •  eclipse
  •  java(2)

随笔档案

  • 2006年8月 (2)
  • 2006年7月 (2)

搜索

  •  

最新评论

  • 1. re: 操作Excel,自动设置列高
  • 看到这个我觉得我的EXCEL 弱智了~
  • --Crusher Machine
  • 2. re: 现在我们的开发架构
  • 评论内容较长,点击标题查看
  • --aihua
  • 3. re: 现在我们的开发架构
  • 请问 BaseDAO具体怎么实现??能否给出一个实例?有空希望和我留言。
  • --智者无疆

阅读排行榜

  • 1. 操作Excel,自动设置列高(1742)
  • 2. 现在我们的开发架构(388)
  • 3. 改进(263)
  • 4. 网页上发送mail的编码问题(255)

评论排行榜

  • 1. 现在我们的开发架构(2)
  • 2. 操作Excel,自动设置列高(1)
  • 3. 改进(0)
  • 4. 网页上发送mail的编码问题(0)

2006年8月21日

网页上发送mail的编码问题

网页上发送mail有2种常用的方式. MailTo 和 Form提交.

两者在编码方面都是一样的.

如果页面是UTF-8编码格式,则发送出去的字符串就是UTF-8,Mail客户端如果以GB2312接受,必为乱码


实际在中文win2000下测试,就算修改Outlook Express默认编码为UTF-8,仍然无法接受正常的汉字。

所以将页面修改为GB2312是一个简单的解决方案。


还有一个问题


如果我在日文系统调用GB2312的页面,仍然无法获取正确的汉字。

解决办法是,在日文系统下,把需要的汉字输到*.ASPX文件上(或者是JS),然后再调用页面,在日文系统上就能够出现正确的汉字。虽然这个时候源代码全部是乱码。


实际上是用日文字体写中国汉字。。。。这个和编码格式问题好像不一样

posted @ 2006-08-21 09:53 aihua 阅读(255) | 评论 (0) | 编辑 收藏

2006年8月20日

操作Excel,自动设置列高

C#

 1   // / <summary>
 2          // / 自动设置Excel列高
 3          // / </summary>
 4          // / <param name="m_objSheet">Worksheet</param>
 5          // / <param name="beginPos">string</param>
 6          // / <remarks>
 7          // / 自动设置Excel列高
 8          // / </remarks>
 9          public   static   void  autoSetHeight(Worksheet m_objSheet,string beginPos)
10          {
11              // 分解坐标
12             string[] rows  =  beginPos.Split( ' , ' );
13              // 获取单元格对象
14             Range range1  =  m_objSheet.Cells[ int .Parse(rows[ 0 ]),  int .Parse(rows[ 1 ])] as Excel.Range;
15              // 获取单元格长/宽
16              int  iRowCount  =  range1.MergeArea.Rows.Count;
17              int  iColumnsCount  =  range1.MergeArea.Columns.Count;
18             
19              // 第一列宽
20              double  iColumnWidth  =   double .Parse(range1.ColumnWidth.ToString());
21
22              // 获取总的列宽
23              double  iSunColumnWidth  =   0 ;
24
25              for  ( int  i  =   0 ; i  <  iColumnsCount; i ++ )
26              {
27                 Range tmp_range  =  m_objSheet.Cells[ int .Parse(rows[ 0 ]), ( int .Parse(rows[ 1 ]) + i)] as Excel.Range;
28                 iSunColumnWidth  =  iSunColumnWidth  +   double .Parse(tmp_range.ColumnWidth.ToString());;
29             }

30
31
32              // 分解单元格
33             range1.UnMerge();
34
35              // 重新获取单元格第一个小块
36             range1  =  m_objSheet.Cells[ int .Parse(rows[ 0 ]),  int .Parse(rows[ 1 ])] as Excel.Range;
37              // 获取第一个小块的原始高度
38              double  range1_height  =   double .Parse(range1.RowHeight.ToString());
39              // 设置第一个小块为自动拉伸
40             range1.EntireRow.AutoFit();
41          
42              int  newRows  =   int .Parse(rows[ 0 ])  +  (iRowCount - 1 );
43              int  newColumn  =   int .Parse(rows[ 1 ])  +  (iColumnsCount - 1 );
44              // 重新获取单元格
45             Range range2  = m_objSheet.get_Range(m_objSheet.Cells[ int .Parse(rows[ 0 ]), int .Parse(rows[ 1 ])],m_objSheet.Cells[newRows,newColumn]);
46              // 合并单元格
47             range2.Merge( 0 );
48
49              double  h1  =   double .Parse(range1.RowHeight.ToString());
50             range2.RowHeight  =  range1_height;
51  
52              // 计算合并后的单元格的高度
53              double  hh  =  h1  * (iColumnWidth / iSunColumnWidth);
54
55              // 如果第一个小块的高度还没有默认高度高,则不设置高度
56              if (h1  >  range1_height)
57              {
58                  // 如果计算后的高度比原始的高,则设新的高度,并且+15,让字体能够显示出来,否则设置原始高+15
59                  if (hh  >  range1_height)
60                  {
61                     range2.RowHeight  =  hh  +   15 ;
62                 }

63                  else
64                  {
65                     range2.RowHeight  =  range1_height;
66                 }

67                 
68             }

69         }

posted @ 2006-08-20 13:30 aihua 阅读(1742) | 评论 (1) | 编辑 收藏

2006年7月4日

改进

    项目基本上采用如下交互模式.
    流程如下.
  1. 一个页面对应一个用类
  2. 一个页面对应一个Struts Action.
  3. 页面上一个动作(提交按钮)对应Action一个方法(或者对应if语句)
  4. 一个Struts Action对应一个BO类
  5. 一个Struts Action 方法(页面一个动作)对应BO一个方法
  6. 一个BO对应1到多个DAO.

  其中业务对象BO,
  1. 都是按照无状态设计的,类似函数大集合.
    1. 函数之间不考虑复用,函数之间功能独立,代码重复率高.
  2. 业务对象都是都是根据用例来划分的(1 vs 1).
    1. 业务对象之间不考虑关系,全部都是函数载体.
  3. DAO主要服务于业务对象.基本上也是1 vs 1
    1. 只能服用CRUD情况.复杂的sql文如果很相似可以合并.
    2. 由于设置上是为业务对象服务,业务对象之间设置沟通很少,所以DAO实现也多重复
  但是开发效率很高.从外到里,全程一人设计.单独看功能完整,全局看,雷同的太多了.

  首先提炼业务对象.从全局角度考虑,划出有限个业务对象.利用对象关系勾勒出完整的业务逻辑.
  其中每个业务对象与PO紧密合作,PO依赖与DAO,实现对象的基本操作(CRUD).
  以上实现业务对象层,主要用来描述业务对象之间的关系,已经持久化功能..

  再设计出查询层,支持复杂查询,获取各种查询结果.

  门户层对客户端(Struts Action)提供业务接口,支持如下:
  1. 对业务对象层操作
  2. 对查询层操作
  3. 对于复杂业务逻辑,结合查询层和业务层来实现.
 
 附上代码。  项目代码
   主要改进如下类
  1. CompinfoServiceImp
    1. 直接调用Compinfo,不显示调用DAO
  2. Compinfo
    1. 内部隐藏调用DAO


posted @ 2006-07-04 22:45 aihua 阅读(263) | 评论 (0) | 编辑 收藏

现在我们的开发架构

    首先说说我们现在采用的开发框架.然后慢慢的进行改造.
    首先是标准的WEB应用程序.包括WEB层,业务层(BO层)和持久化层(DAO/PO).
    1.WEB层,采用Struts.
       1.1 JSP页面采用少量的Struts标签,其他功能通过自定义标签完成.
       1.2 页面操作分为 添加(修改)/列表 两部分.基本上通过CSS来展现.其中列表部分采用Displaytag
       1.3 按需要采用Ajax

    2.业务层采用Spring.
       2.1 通过DelegatingActionProxy绑定Struts
       2.2 BO只有一个空父类.提供Log4j的实例.
       2.3 BO依赖与BaseDAO及具体业务DAO.
           2.3.1  BaseDAO完成基本的增删改查,
           2.3.2  具体业务DAO完成关于本表的复杂的查询
           2.3.3  多表关联的查询,则单独封装在DAO中
       2.4 事务控制统一由Spring AOP配置完成.

    3.持久层采用Hibernate
       3.1 BaseDAO继承HibernateDaoSupport
       3.2 普通HSQL文查询.


    以上是当前项目的状况,以后会逐一对其改进.

posted @ 2006-07-04 21:33 aihua 阅读(388) | 评论 (2) | 编辑 收藏

仅列出标题  
 
Powered by:
BlogJava
Copyright © aihua