只言片语

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年7月4日

网页上发送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) | 编辑 收藏

操作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) | 编辑 收藏

改进

    项目基本上采用如下交互模式.
    流程如下.
  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