[Miles' Blog]

Welcome 2 My Planet

Available categories: [/] [working on downwap.] [trouble shooting] [working on Yup Mailman]

DataGrid.RowHeaderClick 事件 | event [Permalink]

Wed Jan 26 14:06:00 CST 2005
Category [development. ~]

如何得到点击datagrid行首的动作?datagrid类有RowHeaderClick事件,可实际上它的modifier是protected,也就是说不能直接访问。这里只能这样绕弯子:

private bool isHitOnHeader( DataGrid dg ) {
    Point pt = dg.PointToClient(Cursor.Position); 
    DataGrid.HitTestInfo hti = dg.HitTest(pt); 
    return hti.Type == DataGrid.HitTestType.RowHeader;
}
通过测试鼠标hit的位置确定点击性质的确奇怪了一点。MSDN中没有解释。

Posted by: miles
Comments [1] |

yesterday once more|怀旧经典 [Permalink]

Fri Jan 21 08:13:41 CST 2005
Category [development. ~]

今天拿了一个2001年底做的老系统出来维护,感触颇多啊。。一方面那时候java经验不丰富,很多地方的实现都很别扭;另一方面,也正因为这种生涩再加上工期的压力,造就了很多“当量换精度”的超繁琐代码,现在看来都佩服那个时候的毅力。

<miles:validinput name="SulfRate" 
  type="singleline" maxlength="50" size="22" class_="embed">
  <miles:checker checktype="req" errorwords="硫份不能为空"/>
  <miles:checker checktype="num" errorwords="硫份必须为数字"/>
  <miles:value><%=(hashCoal.getDouble("SulfRate")*100)%></miles:value>
</miles:validinput>
其实这是一个不错的实现。通过customized tag做出了一个很有创意的文本输入控件。带有自检功能,可进行多项输入检查。

再来看看这个大巫:
<miles:curveset
  width="700" height="400"
  xoff="10" yoff="0"
  xdecimal="<%=xdecimal%>" ydecimal="0"
  xspace="0" yspace="0"
  xmax="<%=xmax/1000%>" ymax="<%=ymax/10000%>"
  bgcolor='255|240|192'
  gridcolor='144|144|192|100'
  grid="1"
  xcount="20" ycount="10"
  xlabel="Qj" ylabel="Cost"
  border="1"
  legend="2" legendwidth="150" legendheight="20"
>
  <miles:curve funcclass="<%=AC%>" start="0" curvecolor="192|192|192" end="0" 
    desc="许可权成本" xmax="<%=xmax%>" ymax="<%=ymax%>"/>
  <miles:curve funcclass="<%=DR%>" start="0" curvecolor="cyan" end="0" 
    desc="脱硫-换煤最小成本" xmax="<%=xmax%>" ymax="<%=ymax%>"/>
  <miles:curve funcclass="<%=FC%>" start="0" curvecolor="blue" end="0" 
    desc="固定成本(脱硫-换煤最小成本 + 排污费)" xmax="<%=xmax%>" ymax="<%=ymax%>"/>
  <miles:curve funcclass="<%=EC%>" start="0" curvecolor="magenta" end="0" 
    desc="排污费" xmax="<%=xmax%>" ymax="<%=ymax%>"/>
  <%--<miles:curve funcclass="<%=BI%>" start="0" curvecolor="gray" end="0" 
    desc="基准投入" xmax="<%=xmax%>" ymax="<%=ymax%>"/>--%>
  <miles:curve funcclass="<%=SUM%>" start="0" curvecolor="red" end="0" 
    desc="电厂减排成本曲线(固定成本 + 许可权成本)" xmax="<%=xmax%>" ymax="<%=ymax%>"/>
  <miles:vertical vertcolor="255|0|0|50" 
    xmax="<%=xmax%>" ymax="<%=ymax%>" xpos="<%=MinReduction%>" area="1"/>
</miles:curveset>
猜得到这个做什么的么?做这个的!

这个taglib之复杂,已经完全超越了我现阶段分析代码的耐心。。。

Posted by: miles
Comments [0] |

vs.net开发初体验 [Permalink]

Wed Dec 29 20:47:02 CST 2004
Category [development. ~]

以前虽然也用过vs.net,但主要还是处于好奇进行的一些示例研究,关注点在于.net和java在架构上的异同点。这次有机会作一个win平台的standalone application,自然就想趁这个机会深入一下.net的开发细节。深入一用,细节的确是多。前两天基本上算是交学费了,有一半时间在google和msdn上。过了这个阶段效率就慢慢上去了。还好不算太久。 /images/emoticons/silly.gif

总体上来讲,vs.net的可视化开发支持还是要强于jbuilder。这也和.net本身特性有关。毕竟.net类库更庞大,顾及的层面也更丰富一些。而且本身和win平台结合紧密,所以做桌面程序要比java方便不少。就从我用过的DataGrid和JTable来说,功能孰强孰弱暂且不说,光看开发效率,用vs.net开发DataGrid是要比Jb开发JTable应用快不少。

语言层面,我用的是c#。总体感觉和java区别不大,不过更人性化一些,正如MS一贯的风格。目前java和.net的相互学习使得他们之间的差别在变小,比如

Long id=1l;
这样的boxing操作已经自jdk1.4开始支持,但是总体上说,无论从语言层面上,还是从环境设置、文件组织上,java给人的感觉还是严谨一些,而.net则更灵活和便捷。应该说两种方式各有利弊,还算不上核心竞争力。

vs.net可以直接制作windows installer安装包。如果安装了vs.net 2003 bootstraper plug-in的话,甚至可以将.net frameworks一起打包分发。这一点的确很是方便。不过.net frameworks 23MB的体积还是有点太大。如果能最小化的安装frameworks就更好了。

borland也有.net的产品线,我只是一年前观摩过c# builder。感觉上和vs.net的界面有点像似。按照borland的风格,应该还是会有一大堆borland自己开发的类库吧。。。等研究好了vs.net再看看他。

最后说一下ide本身的情况。jbX启动后一般要占用80MB左右的内存,使用中,如果内存不足,会逐步增加内存用量,有时候能达到200MB以上;而vs.net启动的动静相对要小很多,大约只要十几MB的内存,运行期也不过几十MB。效果上看,vs.net的确也要更顺畅一些,很少出现jb的那种除了最大化什么也作不成的情况。造成这种状况的原因应该和CLR在win平台的天生优势以及jb的纯java身份有关。这也从另一个角度说明了在win平台开发桌面程序,java对.net构不成威胁。实际上的应用程序运行体验也是如此,而且感觉相当明显。

Posted by: miles
Comments [0] |

关于servlet2.4新特性 [Permalink]

Mon Nov 22 10:07:59 CST 2004
Category [development. ~]

servlet2.4有不少新特性,的确强大了不少。实践中碰到了不少应用问题,解决起来很是过瘾。

ServletFilter现在可以设置是否对include/error/forward/request进行响应。这样一来,就可以很精确的控制过滤内容了。一个比较典型的应用:

在一个wap应用中,我在filter中对所有的.jwml进行contenttype的设置。在servlet2.4里面,默认不对include/error/forward/request进行filter,这样可以避免复杂的包含关系和调用顺序问题。但是,如果我想让响应http error code(比如404)的error page也需要filter过滤,因为上述默认设置,即使满足uri pattern,filter也不会激发。所以,这时候我就需要修改这个默认设置,使之对于error这种情况进行响应:

  <filter-mapping>
    <filter-name>wmlmimefilter</filter-name>
    <url-pattern>*.jwml</url-pattern>
    <dispatcher>ERROR</dispatcher>
  </filter-mapping>
这是一个简单例子,举一反三,就知道这个细节对于日常应用是多么实用了。类似的改进在新版servlet中还有不少,大家可以通过比较新的web.xml的schema(不再是dtd)和以前的dtd来一一认识 /images/emoticons/grin.gif

Posted by: miles
Comments [0] |

Tomcat 5.0.x新问题:get数据编码 [Permalink]

Mon Nov 22 09:54:19 CST 2004
Category [development. ~]

以前tomcat4中,get/post方式编码处理相同。所以为了解决wap中文问题,我只需要request.setCharEncoding("UTF-8")就可以解决问题;但是现在,这招对于tomcat5.0.x完全没有用。get方式时候,根本不会起效。只有通过设置server.xml如下:

    <Connector port="8080"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               debug="0" connectionTimeout="20000" 
               disableUploadTimeout="true" URIEncoding="UTF-8"/>
才可以让get和post一致,达到以前的效果。可是这样的话,灵活性就会大打折扣。不知道以后版本是否会有改善,抑或有其他好的解决办法,只不过我们还不清楚。

按理说tomcat作为成熟的web container,应该不会忽略这类问题的。之所以这么做应该有他的道理。。可惜时间太少,放过了太多的技术点,没有时间一一搞明白 /images/emoticons/sad.gif

Posted by: miles
Comments [0] |

关于vbs字符串内存资源的释放 [Permalink]

Wed Oct 27 10:28:01 CST 2004
Category [development. ~]

今天有人问了一个很有意思的问题,就是vbs字符串所占的内存如何释放。我做了下面这个test.vbs:

Dim temp, WshShell
set WshShell = WScript.CreateObject("WScript.Shell")

temp = space(1024*1024*20) '20MB

WScript.Sleep 2000

'temp = ""

msgbox("done")

这里打开和关闭temp=""时候可以发现,系统内存使用状况完全不一样(通过任务管理器就可以看到)。结论也就很容易得出了。。。

Posted by: miles
Comments [0] |

使用FileWriter时候内容丢失 [Permalink]

Wed Sep 15 15:50:52 CST 2004
Category [development. ~]

内容比较多的时候,使用writer一定要在结束时候flush/close,否则会导致内容的丢失。一定要注意!!

Posted by: miles
Comments [0] |

没有package的bean在jsp中的应用 [Permalink]

Fri Jun 25 14:07:50 CST 2004
Category [development. ~]

今天有人问我一个问题,说是他的bean怎么也无法在jsp中使用。我看了代码,没什么问题。拿来一试,果然不行。。经过调试发现,只要没有package,就有问题!仔细想想,以前好像也遇到过,不过当时因为赶进度,加了package就过了,没有回头多看。

这次时间充裕,上网找了一下资料。终于找了一个看上去比较合理的解释:

When you put the bean class files in the WEB-INF/classes dir, they are automatically in the CLASSPATH. You don't have to do anything special.

Having said that, when you put bean classes in the WEB-INF/classes, the whole Java world knows that these are beans without any package stmts, right!

Now there is a sticky thing with no-package bean classes.... /images/emoticons/sad.gif . When you use bean without a package stmt, the App Server will look for the bean class in the same package as that of the generated Servlet code. And we don't know what package the generated servlet code is, so generally the JSP fails.

Bottomline, put your beans in a package and then access them. Ofcourse in this case you will put the bean class files in the WEB-INF/classes/mycom/mypackage/ directory which reflects the package stmt in your bean class.

Posted by: miles
Comments [0] |

?
四月 2024
Sun? Mon? Tue? Wed? Thu? Fri? Sat?
 123456
78910111213
14151617181920
21222324252627
282930    
       
<  Mar???Today??? May  >
<< <   1 2   > >>

Available categories: [/] [working on downwap.] [trouble shooting] [working on Yup Mailman]

Powered By blojsom?? RSS Feed? RSS2 Feed? RDF Feed

html hits:?51329