云自无心水自闲

天平山上白云泉,云自无心水自闲。何必奔冲山下去,更添波浪向人间!
posts - 288, comments - 524, trackbacks - 0, articles - 6
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

首先是应用的代码, 在应用中使用 <mx:ModuleLoader >来加载模块

<?xml version="1.0"?>
<!-- modules/URLModuleLoaderApp.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" viewSourceURL="srcview/index.html">

    
<mx:Panel
    title
="Module Example"
    height
="90%"
    width
="90%"
    paddingTop
="10"
    paddingLeft
="10"
    paddingRight
="10"
    paddingBottom
="10"
    
>
    
    
<mx:Label width="100%" color="blue"
    text
="Select the tabs to change the panel."/>
    
    
<mx:TabNavigator id="tn"
    width
="100%"
    height
="100%"
    creationPolicy
="auto"
    
>
    
        
<mx:VBox id="vb1" label="Column Chart Module">
        
            
<mx:Label id="l1" text="ColumnChartModule.swf"/>
            
<mx:ModuleLoader url="ColumnChartModule.swf"/>
        
        
</mx:VBox>
        
        
<mx:VBox id="vb2" label="Pie Chart Module">
        
            
<mx:Label id="l2" text="piehchartmodule.swf"/>
            
<mx:ModuleLoader url="piechartmodule.swf"/>
        
        
</mx:VBox>
        
        
<mx:VBox id="vb3" label="Line Chart Module">
        
            
<mx:Label id="l3" text="linehchartmodule.swf"/>
            
<mx:ModuleLoader url="linechartmodule.swf"/>
        
        
</mx:VBox>
    
    
</mx:TabNavigator>
    
</mx:Panel>

</mx:Application>


在这个应用中主要是一个TagNavigator, 里面有三个标签页. 每个标签页加载一个模块.
下面是其中一个模块的代码:


<?xml version="1.0"?>
<!--ColumnChartModule.mxml -->
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%" >

    
<mx:Script><![CDATA[
    
        
import mx.collections.ArrayCollection;
        [Bindable]
        
public var expenses:ArrayCollection = new ArrayCollection([
        
{Month:"Jan", Profit:2000, Expenses:1500},
        
{Month:"Feb", Profit:1000, Expenses:200},
        
{Month:"Mar", Profit:1500, Expenses:500}
        ]);
        
    ]]
></mx:Script>
    
    
<mx:ColumnChart id="myChart" dataProvider="{expenses}">
    
        
<mx:horizontalAxis>
        
            
<mx:CategoryAxis
            dataProvider
="{expenses}"
            categoryField
="Month"
            
/>
            
        
</mx:horizontalAxis>
        
        
<mx:series>
        
            
<mx:ColumnSeries
            xField
="Month"
            yField
="Profit"
            displayName
="Profit"
            
/>
            
            
<mx:ColumnSeries
            xField
="Month"
            yField
="Expenses"
            displayName
="Expenses"
            
/>
            
        
</mx:series>
    
    
</mx:ColumnChart>
    
    
<mx:Legend dataProvider="{myChart}"/>
    
</mx:Module>


最后, 应用和三个模块一共会生成4个SWF. 一般来说, 应用使用延迟加载策略. 也就是说, 如果你打开应用后, 从来都不使用其中的某个模块, 那个这个模块永远不会被加载. 这次做的好处是, 加快了第一次打开应用的速度, 但随之而来的缺点就是, 第一次打开使用某个功能, 需要加载模块时, 会需要一点等待的时间.

posted @ 2007-04-28 12:38 云自无心水自闲 阅读(6332) | 评论 (6)编辑 收藏

    今天在一台新的机器上, 装开发环境, 下载了新的JDK1.6和Tomcat6. 安装完毕后, Tomcat无法正常启动,
在Tomcat的Logs中发现有以下错误:

 javajni.c] [error] The specified module could not be found.

到底是怎么回事呢?
因为是模块加载的问题, 所以拿出从systeminternals下载的FileMon来监测到底是哪个东西加载失败了.
启动FileMon,
然后, 尝试启动Tomcat, 结果当然是失败了.
然后在FileMon中过滤一下, 很快就找到了一个错误: MSVCR71.dll, 这个动态链接库加载失败.
经过搜索后发现在JDK的bin目录下有这个文件.
将其复制到system32目录下, 然后再启动Tomcat, 果然成功了!

这个问题可能和jakarta_servic加载动态链接库的LOAD_WITH_ALTERED_PATH选项有关.

posted @ 2007-04-26 18:01 云自无心水自闲 阅读(5430) | 评论 (14)编辑 收藏

最近judahfrangipane提出一种新的模式: DUDE.
大多数人都知道MVC, 问题是如果不管具体情况, 生搬硬套MVC模式就会有一些问题. 一个应用中不是所有的东西都会有一个View, 也不是所有的东西都有一个独立的Controller. 有时候, 可能会有多个Controller. 所以judahfrangipane推荐了一种新模式:

Data Models 如果必要的话
User Interface 如果必要的话
Design patterns 如果必要的话
Event handling 如果必要的话

注意, 上述的四个部分不一定是全部必需的. 这样, 你在进行应用设计的时候, 就少了一些条条框框. 而可以根据知识, 经验, 设计模式来找到一个适合应用的途径, 就象Chuck Hoffman所说的那样, 不要"过度设计". 但是有两个东西必须完全分离, 那就是data和UI.

posted @ 2007-04-24 20:19 云自无心水自闲 阅读(389) | 评论 (0)编辑 收藏

 

新特性
1. 支持AMF3, 这一点无疑是激动人心的.
2. 支持JSON, 除了gateway.php外, 增加了json.php, 让你的服务能够使用JSON.
有两个例子:
http://5etdemi.com/amfphp2/samples/ajaxtables/
http://5etdemi.com/amfphp2/samples/spry/
3. 一个新的service browser
4. 在php端, 不再需要写 $this->methodTable 这个东东了. 在amfphp 1.9 中 所有的方法默认为可以远程访问,除非方法名是以下划线开始 或者 方法是 private 的(只有 php5 支持) 。

 

posted @ 2007-04-21 16:06 云自无心水自闲 阅读(870) | 评论 (0)编辑 收藏

1. 先确定phpinfo()可以运行.
2. 在通过phpinfo()查看两个参数, 一个是php.ini的路径, 一个extension_dir的配置
我看到我的php.ini文件使用是的php安装路径下的, 而不是网上文章所说需要拷贝到c:\windows, 首先要确定你不要改错了文件, 免得浪费时间.
然后在php.ini文件中, 再修改extension_dir参数.
3. 几个与extension有关的dll需要去掉注释.
4. 需要设置一个PHPRC的环境变量, 指明php的安装路径.

 

posted @ 2007-04-20 17:35 云自无心水自闲 阅读(531) | 评论 (0)编辑 收藏

首先介绍一下SystemManager. SystemManager是Flex应用的主控者, 它控制着应用窗口, Application实例, 弹出窗口, cursors, 并管理着ApplicationDomain中的类. SystemManager是FlashPlayer实例化的第一个类, 它存储了主应用窗口的大小和位置信息, 保存其子组件比如:浮动弹出窗口和模态窗口的痕迹. 通过SystemManager可以获得内嵌字体,样式和document对象.
自定义的可视化组件(UIComponent的子类)只有在调用过addChild()后, 才会有一个SystemManager赋给他们, 之前是Null. 所以在自定义可视化组件的构造函数中不要使用SystemManager.

通常, Application对象创建时, 发生如下事件:
1. 实例化Application对象
2. 初始化Application.systemManager
3. Application在初始化过程之前, 派发预初始化事件.
4. 调用createChild(). 此时, 所有应用组件被创建, 所有组件的createChild()被调用.
5. Application派发初始化事件, 表明所有的组件初始化完毕.
6. 派发creationComplete事件
7. Application对象添加到显示列表中
8. 派发applicationComplete事件

大多数情况下, 我们使用<mx:Application>来创建application对象, 但如果使用ActionScript来创建的话, 那么建议不要在application的构造函数中创建组件, 推荐在crateChildren函数中, 主要是从性能方面考虑.

Flash包含的是一个时间线上的多个帧, 而Flex的SWF只包含2个帧. SystemManager, Preloader, DownloadProgressBar和少量工具类都在第一帧, 剩下的包括应用代码/ 内嵌资源全都在第二帧中. 当Flash Player下载下载SWF时, 只要接收到第一帧内足够的数据, 就会实例化SystemManager, 由它来创建Preloader, 然后创建DownloadProgressBar, 这两个对象会察看剩余字节的传输过程. 当第一帧的所有字节传输完毕后, SystemManager发送enterFrame到第二帧, 然后是其他事件. 最后Application对象派发applicationComplete事件.

posted @ 2007-04-17 17:47 云自无心水自闲 阅读(2781) | 评论 (3)编辑 收藏

一个动态修改Tree节点标签的例子

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"  horizontalAlign="left"
    creationComplete
="initApp()">
<mx:Script><![CDATA[
  [Bindable]
public var _xmlData:XML;
  [Bindable]
private var _xmlCur:XML;
 
  
private function initApp():void
  {
    
//set the test data
    _xmlData =
      
<node label="Mail Box">
        
<node label="Inbox"/>
        
<node label="Deleted mail"/>
        
<node label="Personal"/>
        
<node label="Professional"/>
        
<node label="Spam"/>
        
<node label="Sent"/>
      
</node>                                             

    myTree.selectedItem 
= myTree.dataProvider[0];        //select the first node
    callLater(expandTreeNode, [myTree.selectedItem]);    //use callLater to expand that node
  }//initApp
 
  
private function expandTreeNode(myXMLNode:XML):void{
    myTree.expandChildrenOf(myXMLNode,
true);              //expand the node
    _xmlCur = XML(myTree.selectedItem);                   //set the bindable variable
  }
 
  
private function oChangeTree(oEvent:Event):void
  {
    _xmlCur 
= XML(oEvent.target.selectedItem);            //set the bindable variable
  }//
 
  
private function updateNode(oEvent:Event):void
  {
    var xmlSelected:XML 
= XML(myTree.selectedItem)        //get a reference to the selected node
    xmlSelected.@label = tiLabel.text;                    //set the label attribute
  }//updateNode
   
    
]]
></mx:Script> 
  
<mx:Label text="Update selected Node label" />
  
<mx:TextInput id="tiLabel" text="{_xmlCur.@label}" change="updateNode(event)" />
  
<mx:HBox>
    
<mx:Tree id="myTree" width="200" height="200" labelField="@label"
        showRoot
="true"
        dataProvider
="{_xmlData}"
        change
="oChangeTree(event)" />
 
<mx:DataGrid id="dg" dataProvider="{_xmlData.node}"  >
    
<mx:columns>
      
<mx:Array>
        
<mx:DataGridColumn headerText="Name" dataField="@label"  />
       
</mx:Array>
    
</mx:columns>
  
</mx:DataGrid>
  
<mx:Label text="{_xmlCur.@label}" />
  
</mx:HBox>
      
</mx:Application>



应用中主要包含4个组件, 一个TextInput, 一个Tree, 一个DataGrid, 一个Label
1. 先看Tree, Tree使用_xmlData作为数据源, 定义一个change事件处理函数, 将当前节点存储到_xmlCur变量中.
2. TextInput的数据源就是_xmlCur的label属性, 也就是Tree当前节点的标签. 他也定义了一个change事件处理函数, 在TextInput中的文本改变时, 将新的文本赋值给Tree当前节点的标签, 也就是改变当前Tree节点的标签值. 值得注意的是赋值并不是直接给Tree中或者节点中的某个属性, 而是通过修改数据源Xml的值来改变的.
3. DataGrid的使用显示了如何在DataGrid中展示Xml的技巧.
4. 最后一个Label只是简单的显示当前节点的标签值, 与TextInput的文本保持同步

posted @ 2007-04-15 20:50 云自无心水自闲 阅读(6095) | 评论 (0)编辑 收藏

今天准备用一下, 已经很久没有使用的NetBeans来测试一个小程序.

在开始菜单中, 点了一下, 结果没有出现我期待的IDE, 而是弹出一个对话框, 说无法在C:盘的JDK目录中找到Java.exe.
奇怪啊, 我的JDK是安装在D:的啊.

于是, 在NetBeans的目录下, 查看了一下, 看到有个etc目录, 进去后, 打到了netbeans.conf. 打开一看, 果然NetBeans的JDK路径配置在此.
将此文件中的路径改为正确路径. OK, 问题解决, NetBeans又正常启动了.

posted @ 2007-04-13 13:02 云自无心水自闲 阅读(2202) | 评论 (3)编辑 收藏

1. Caringorm2.1的包中增加了完整的ASDoc文档

2. 增加Locale,错误信息的国际化的处理。
添加了一个Properties文件,
添加了com.adobe.cairngorm.CairngormMessageCodes和com.adobe.cairngorm.CairngormError两个类,其中CairngormMessageCodes用于定义Properties文件中的键值,而CairngormError封装了Error,在应用执行的过程不再直接抛出Error,而抛出一个CairngormError,其中带一个参数就是MessageCode,根据MessageCode到Properties文件中取出相应的消息。

3. 在business中,添加了一个IServiceLocator的接口
ServiceLocator实现IServiceLocator接口,相比以前增加了以下几个方法:
a、public function getRemoteObject( serviceId : String ) : RemoteObject // Return the RemoteObject for the given service id.
b、public function getHTTPService( serviceId : String ) : HTTPService // Return the HTTPService for the given service id.
c、public function getWebService( serviceId : String ) : WebService // Return the WebService for the given service id.
d、public function getConsumer( serviceId : String ) : Consumer  // Return the message Consumer for the given service id.
e、public function getProducer( serviceId : String ) : Producer // Return the message Produce for the given service id.
f、public function getDataService( serviceId : String ) : DataService // Return the DataService for the given service id.
g、public function setCredentials( username : String, password : String ) : void // Set the credentials for all registered services. Note that services that use a proxy or a third-party adapter to a remote endpoint will

原来的getService和getInvokerService方法已经废弃,改为了getRemoteObject

4. 在Command中,增加了ICommand接口,原来的Command接口继承ICommand

5. 在VO中,增加了IValueObject接口,原来的ValueObject继承IValueObject接口

上面添加的几个接口,除了IServiceLocator相较2.0版本有了较大的变化,增加了一些方法,其他的几个接口,依我所见,纯粹是换了名字而已。

 

posted @ 2007-04-10 19:48 云自无心水自闲 阅读(1383) | 评论 (0)编辑 收藏


这个名字的改变反应出FDS的一个重要的扩展:LiveCycle Data Service与Adobe其他LiveCycle服务产品的整合将更紧密。

LiveCycel Data Service将有一些重要的新的变化:
1. 提升数据服务消息的性能
2. 与PDF、J2EE门户等的集成
3. 另外还有一些针对未来Apollo应用的很重要的功能,比如:本地数据缓存和脱机消息等。

下载地址:http://labs.adobe.com/technologies/livecycle_dataservices2_5/

posted @ 2007-04-04 19:07 云自无心水自闲 阅读(2666) | 评论 (0)编辑 收藏

仅列出标题
共29页: First 上一页 16 17 18 19 20 21 22 23 24 下一页 Last