2007年3月30日

2007年3月30日,晴转多云

很久没有写过东西了,总是不能坚持
好累,过年后,一直到现在,每天都忙个不停,下班回住处后,就只想睡觉。唉,不说了,睡觉,明天钓鱼去:)

posted @ 2007-03-30 23:31 方崇德 阅读(55) 评论(0) 编辑

2006年7月19日

Struts:Exception thrown by getter for property

下午学着在利用Stuts提供的MapForm机制来存储和检索字段。在网上google了一下,很多网站都提供了这样的例子:
public class MapForm extends ActionForm
{
private Map map = null;
public void setMap(Map map) {
this.map = map;
}
public Map getMap() {
return this.map;
}
同时增加一个属性方法去设置和获取Map中的数据。
public void setAttribute(String attributeKey, Object attributeValue)
{
getMap().put(attributeKey, attributeValue);
}
public Object getAttribute(String attributeKey)
{
Object keyValue = getMap().get(attributeKey);
return keyValue;
}
这样我们在jsp页面中,我们就可以使用Struts的标签接触这些Map数据。
<html:text property="attribute(key)"/>
于是照着提供的这个例子在本机允许了一下,发现总是报Exception thrown by getter for property formvalue(password) of bean org.apache.struts.taglib.html.BEAN异常。初步估计是getFormvalue方法有错误,可一想网上都是这么做的,而我对java也刚熟悉,所以用了1个小时还是没有解决。后来把这代码仔仔细细的看了一篇,还真被我发现问题了。问题就出在private Map map = null; 这句话上,查了一些java资料,Map是一个接口,而且代码中也没有代码来实例化它,因此像getMap().get(attributeKey)这样的方法当然就会报错。因此对代码做了以下修改:private Map map=new HashMap()。果然,改好程序就能正常运行了。

posted @ 2006-07-19 17:15 方崇德 阅读(921) 评论(1) 编辑

2005年11月15日

首次启动aspx时的相关说明

客户端第一次请求某一个aspx文件时,在服务器端,csc或vbc首先将该aspx文件相关的.cs编译成dll,然后再运行这个dll文件,将绘制的html返回给客户端,然后以后的访问就直接调用编译后的dll 。同时把该dll文件保存在%Windir%\Microsoft.NET\Framework\<框架版本号>\Temporary ASP.NET Files\$YourWebAppName$\随机数\随机数\目录下。在该目录下我们发现每一个编译后的cs文件将分别产生一系列文件。假设该文件名为index.aspx,它将产生如下文件:
index.aspx.c6be2b85.xml,该文件中包含以下内容:
<preserve assem="ic4c67s_" type="ASP.index_aspx" hash="48be2af831319072">
    <filedep name="c:\inetpub\wwwroot\UnicomJx\WorkFlow\bin\WorkFlow.DLL" />
    <filedep name="c:\inetpub\wwwroot\UnicomJx\WorkFlow\bin\Microsoft.Web.UI.WebControls.DLL" />
    <filedep name="c:\inetpub\wwwroot\UnicomJx\WorkFlow\OfficeThingManage\index.aspx" />
</preserve>
 assem属性指示编译时产生的文件名前缀
 filedep包含编译时产生的文件名和aspx文件名之间的映射关系,以及该文件所引用的dll;
ic4c67s_.pdb:包含了辅助调试信息和单步调试代码
ic4c67s_.cs:该文件包含以下内容(注:省略部份代码)
  public class index_aspx : twoa.module.tool.index, System.Web.SessionState.IRequiresSessionState
  {
   public index_aspx() {
            System.Collections.ArrayList dependencies;
            if ((ASP.index_aspx.__initialized == false)) {
                ASP.index_aspx.__stringResource = System.Web.UI.TemplateControl.ReadStringResource(typeof(ASP.index_aspx));
                dependencies = new System.Collections.ArrayList();
                dependencies.Add("c:\\inetpub\\wwwroot\\UnicomJx\\WorkFlow\\OfficeThingManage\\index.aspx");
                ASP.index_aspx.__fileDependencies = dependencies;
                ASP.index_aspx.__initialized = true;
            }
            this.Server.ScriptTimeout = 30000000;
        }
         protected override void FrameworkInitialize() {
            SetStringResourcePointer(ASP.index_aspx.__stringResource, 2295);
            this.__BuildControlTree(this);
            this.FileDependencies = ASP.index_aspx.__fileDependencies;
            this.EnableViewStateMac = true;
        }
  }
  通过上述代码,我们发现class index_aspx继承twoa.module.tool.index(aspx.cs页面类),在这个类里初始化自定义属性或对象,把组成该index.aspx页面
  的所有子控件添加到控件集合树中,初始化子控件
ic4c67s_.cmdline:编译该文件相关参数
ic4c67s_.dll:初始化该page页面
ic4c67s_.err:包含当编译出错产生的信息
ic4c67s_.out:包含执行编译命令后的一些输出信息

posted @ 2005-11-15 15:16 方崇德 阅读(114) 评论(0) 编辑

2005年9月12日

有关全局对象的问题

一、问题的形成
     公司MSS系统里,原有的生成文档方式方式是,利用window.open打开一个wordcreate.aspx文件,然后在这个aspx文件中调用生成文档控件(注:该控件有vb编写,通过引用microsoft office 10.0 object library来生成文档)来生成一个doc文件,但是由于由于现在大多数客户端都安装了广告拦截工具,用这种方式的话,会把生成文档控件所在窗口给屏蔽了,导致不能生成文档。于是现在用ifame标签把wordcreate.aspx嵌入到页面中,来生成文档。用这种方式第一次生成文档的时候,无任何异常情况,但是第二次再执行同样的生成文档操作时,就会发现生成文档控件启动了三个word进程,文档生成结束后,只关闭了一个word进程。这导致生成的文档没有达到预期的效果,并且打开时还提示该文档已被某某用户锁定。
二、问题产生的原因
       调试程序发现,当程序运行到ActiveWindow.View.TableGridlines = False时出错,显示462错误:The remote server machine does not exist or is unavailable,而出错后,程序并没有把当前出错进程终止掉,只是把Word.Application类型变量oWord设置成Nothing,并且继续往下执行(注:生成文档的过程是先创建一个word进程,打开一doc文件,然后把该doc文件里的图片,表格,文字复制出来。然后再重复同样的操作,把另一doc文件的信息复制出来。最后一步,把之前复制出来的信息保存到一新的doc文件中, 终止该进程),这样就会出现三个word进程。而那句代码的意思是让改文档里表格线隐藏掉。
      上网查找462错误形成的原因,发现ms有一篇《在 Visual Basic 中使用早期绑定时 Office 自动执行出现错误或意外行为》的文章刚好说到这个问题。出现这个错误的原因就是因为使用了全局对象的非限定方法引起的。而代码ActiveWindow.View.TableGridlines = False中的ActiveWindow恰好就是一个全局对象。
 三、为什么用window.open和iframe方法会现在两种不同的结果呢?
         这得从全局对象说起,全局对象就是在程序中,可以在任何代码位置来调用全局对象的方法和属性,而不需要显式设置对象的大小和创建对象的新实例。如果以前尚未创建该对象,在调用代码时 VB 将创建该对象,然后在一个隐藏的变量中设置对该对象的引用。对该对象的任何非限定方法或属性调用都在隐藏的引用上调用。程序无权访问此隐藏的变量。也无法更改或释放它。该引用直到项目结束后才会自动释放。因此,在页面第一次调用该控件生成文档时,控件就会创建office引用库中的相关全局对象的引用,当用window.open方法生成文档后,会关闭当前IE窗口,从而释放了全局对象的引用。而用ifame方式生成文档后,当前IE窗口并没有关闭,全局对象的引用还是之前第一次生成文档时创建的word对象实例,因此虽然代码在每次运行时都创建 Office 应用程序的一个新实例,但非限定代码(非限定代码:属性过程使用同一名称并返回各自的对象)导致 VB 设置了对旧实例的一个隐藏引用,而旧实例已经结束了,因此就会出现本文开头描述的错误。

posted @ 2005-09-12 20:58 方崇德 阅读(314) 评论(0) 编辑

导航

<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

公告

昵称:方崇德
园龄:7年5个月
粉丝:0
关注:0

搜索

 
 

常用链接

随笔分类

随笔档案

最新评论