云自無心水自閑

          天平山上白云泉,云自無心水自閑。何必奔沖山下去,更添波浪向人間!
          posts - 288, comments - 524, trackbacks - 0, articles - 6
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          新的Flex.org把內(nèi)容分成5大部分
          左邊4個,分別是:Flex實例,F(xiàn)lex下載、Flex社區(qū)、幫助
          右邊一個大塊是:Flex介紹和Flex盛會。

          整體感覺比以前要清新爽潔。

          最上面的一排菜單項好像比以前要多。
          有博客、社區(qū)、文檔、下載、工作、演示、支持。

          posted @ 2007-04-04 18:59 云自無心水自閑 閱讀(709) | 評論 (0)編輯 收藏

          Flexlib 1.5
          下載地址:
          http://flexlib.googlecode.com/files/flexlib-.1.5.zip

          里面有4個目錄:
          bin
          src
          docs
          examples

          包含:
          AdvancedForm
          ConvertibleTreeList
          DragCanvas
          DraggableSlider
          HAccordion
          ImageMap
          PromptingTextinput
          ScrollableMenus
          SuperTabNavigator
          TreeGrid
          VerticalMenuBar
          這些內(nèi)容

          posted @ 2007-03-30 13:23 云自無心水自閑 閱讀(1056) | 評論 (0)編輯 收藏

          怎樣才能開發(fā)出一個好的軟件系統(tǒng)呢?分成3個步驟:
          1、首先確定用戶需求,確保最后出口的軟件確實是用戶需要的東西。這是最重要的一步。
          2、應(yīng)用基本的OO原則來給系統(tǒng)添加可擴(kuò)展性。
          3、盡量使用系統(tǒng)易維護(hù)、可重用。

          對象專注于自己要做的事情,而且只是自己份內(nèi)的事情。
          1. 對象應(yīng)該做對象名所表明的事情
          2. 每個對象應(yīng)該表現(xiàn)出單一的一致性的概念。比如:鴨子這個抽象對象就不能表現(xiàn)得象一個真實的會叫的鴨子,或者象一只黃色的塑料鴨子。
          3. 如果你的對象中的一個屬性經(jīng)常沒有具體的值或者經(jīng)常是Null,那么你的對象就可能承擔(dān)了多余的職責(zé)。就需要考慮一下,這個屬性確實是這個對象的一部分嗎?

          靈活性:這是用戶滿意所必需的。
          封裝:幫助你將代碼組裝成邏輯模塊。任何時候看到了重復(fù)的代碼,請想辦法把它們封裝起來。
          功能:功能改變最好將影響局限在功能本身,不要影響其他的代碼。

          posted @ 2007-03-29 15:42 云自無心水自閑 閱讀(451) | 評論 (0)編輯 收藏

          Caringen是一個Eric Feminella自己開發(fā)的一個小工具. 現(xiàn)在他把這個工具共享出來.
          Cairngen并不能讓所有的人解決所有的問題, 它只是簡單地加快開發(fā)的過程.

          Cairngen是一個Caringorm的代碼生成器, 它使得開發(fā)者可以很方便地生成Cairngorm項目的結(jié)構(gòu)框架, 包括: Cairngorm項目的目錄結(jié)構(gòu), 一個缺省的ModelLocator, Controller, ServiceLocator. Cairngen也可以生成Event, Command, Delegate類.

          Cairngen使用Flex2和PHP5.2.0開發(fā), 利用了AMFPHP. 安裝過程十分方便. 你可以在Flex Builder的瀏覽器中直接運(yùn)行Cairngen來快速方便地生成Cairngorm的類.

          Cairngen使用'步驟(Sequence)'來描述Event, Command, Delegate類之間的關(guān)系.
          在Cairngen中只要命名一個'步驟',點擊一下生成按鈕就可以生成一個'步驟'. 然后刷新一下Flex項目, 生成的類就OK了. 在一些特殊的情況下, 你不希望添加Delegate類, 那么你可以選擇排除Delegate類的生成, 這樣的話, Cairngen只生成Event和Command.
          生成的Command類實現(xiàn)Cairngorm的Command接口, 但不實現(xiàn)IResponder接口. Cairngen還能夠正確地將事件強(qiáng)制性轉(zhuǎn)化(casting)為Coand中的類型, 并import所有相關(guān)的類.

          系統(tǒng)需求:
          1. 了解AMFPHP, Apache2.0.59和PHP5.2.0, 在使用Cairngen之前要求先安裝AMFPHP, 而且gateway.php的訪問虛擬目錄應(yīng)該如下設(shè)置: http://localhost/amfphp/gateway.php. 在1.0版正式發(fā)布后, 這個URL可以自由配置.
          2. 還需要安裝Flex2, PHP, 你可以用WAMP5來集成安裝Apache5.5和PHP. 安裝好PHP和AMFPHP后, 就可以解壓縮Cairngen Alpha 1. 把services目錄復(fù)制到amfphp的根目錄下. 然后復(fù)制cairgen-ui目錄到apache的www根目錄下.

          使用:
          安裝好PHP和AMFPHP后, 就可以開始使用Cairngen了. 打開瀏覽器輸入http://localhost/cairngen-ui/Cairngen.html打開生成器的圖形界面. 創(chuàng)建Cairgen項目:
          點擊 begin
          給你的Cairngen項目命名. 這個名稱與Flex項目的名稱相同, 選擇你的Cairngorm的版本, 選擇Flex項目的路徑. 設(shè)置項目中包路徑(比如: com.domain.projectname). 最后, 檢驗一下輸入內(nèi)容, 點擊"Create Project". 刷新Flex項目查看缺省的Cairngorm項目結(jié)構(gòu), ModelLocator, Service和Controller類.

          創(chuàng)建"步驟":

          首先是給步驟命名, 然后選擇是否要生成Delegate類, 點擊生成, 并刷新Flex項目. 可以發(fā)現(xiàn)需要的類已經(jīng)生成完畢了. 現(xiàn)在需要把它們添加到Controller中.
          接下來編輯模板文件: 你可以修改模板文件(.tpl)來實現(xiàn)你的特定的Cairngorm需求; 模板文件在 amfphp\services\com\ericfeminella\cairngen\templates目錄下.

          生成器下載地址: http://code.ericfeminella.com/cairngen/Cairngen%20Alpha%201%20PreRelease.zip

          posted @ 2007-03-24 00:13 云自無心水自閑 閱讀(2087) | 評論 (0)編輯 收藏

          AppGen
          1、在AppGen中沒有能夠生成Struts的Form
          在gen的target的中,添加生成Struts Form的子任務(wù)
          ??????? <!-- generate struts forms -->
          ??????? <xdoclet destdir="${build.dir}/${gen.dir}/web" excludedtags="@version,@author"
          ??????????? addedtags="@xdoclet-generated at ${TODAY}" force="${xdoclet.force}"
          ??????????? mergedir="metadata/web">
          ??????????? <fileset dir="F:\\Java\\Eclipse\\Space\\appfuse\\WEB-INF\\src"/>

          ??????????? <configParam name="basePackageName" value="org.appfuse"/>

          ??????????? <!-- generate struts forms -->
          ??????????? <actionform templateFile="${template.dir}/generic/struts_form.xdt">
          ??????????????? <packageSubstitution packages="model" substituteWith="webapp.form"/>
          ??????????? </actionform>
          ??????? </xdoclet>

          2、在AppGen中沒有能夠生成struts-config.xml
          在gen的target中添加生成Struts-config.xml的子任務(wù)。
          ??????? <taskdef name="webdoclet" classname="xdoclet.modules.web.WebDocletTask">
          ??????????? <classpath>
          ??????????????? <path refid="xdoclet.classpath"/>
          ??????????????? <path refid="web.libs.classpath"/>
          ??????????? </classpath>
          ??????? </taskdef>
          ??????? <webdoclet destdir="build/gen/web/WEB-INF" force="true"
          ??????????? mergedir="metadata/web" excludedtags="@version,@author" verbose="true">
          ??????????? <fileset dir="${model.src.dir}"/>
          ??????????? <strutsconfigxml validateXML="true" version="1.2"/>
          ??????????? <strutsvalidationxml version="1.1.3"/>
          ??????? </webdoclet>
          其中需要注意的是web.libs.classpath,一開始我沒有添加這些庫,結(jié)果無法正確生成配置文件。
          在Appfuse中,大多數(shù)的Action是繼承BaseAction的,只有UploadAction是直接繼承Struts的Action;在沒有添加庫文件時,生成的struts-config.xml只包含一個UploadAction的映射。
          添加完整的庫文件后,才能生成正確的配置文件。

          最后整理一下,使用AppGen生成的文件:

          1、ApplicationContext-hibernate.xml中添加personDao的配置,ApplicationContext-service.xml中添加personManager的配置
          2、PersonDaoHibernate.java,PersonManager.java,PersonManagerImpl.java,PersonAction.java,PersonForm.java,PersonAction.java
          3、PersonForm.jsp,PersonList.jsp
          4、struts-config.xml覆蓋
          5、menu-config-Person.xml合并到menu-config.xml中,menu-Person.jsp添加到common\menu.jsp中
          6、sample-data-Person.xml,用于測試的數(shù)據(jù)

          posted @ 2007-03-19 12:10 云自無心水自閑 閱讀(1475) | 評論 (0)編輯 收藏

          Appfuse中與數(shù)據(jù)庫有關(guān)的有用的腳本只有少數(shù)的幾個,其他還有一些新建、編譯、打包、部署、安裝等等,由于我是在Eclipse環(huán)境下,使用Tomcat插件進(jìn)行開發(fā),對于這些其實不需要特別的關(guān)心。
          列舉一下我認(rèn)為有用的:
          1、hibernatedoclet
          使用xdoclet生成Hibernate的映射文件hbm.xml。
          2、db-prepare
          使用hbm2ddl使用并執(zhí)行create-table.sql,根據(jù)hbm在數(shù)據(jù)庫中建立數(shù)據(jù)表。要注意的是,生成過程還需要POJO的class。
          3、db-load
          使用dbunit將Xml格式的數(shù)據(jù)insert到數(shù)據(jù)庫中。

          目前我的build.xml中只包含這幾個target。

          另外,AppGen的build.xml中,我認(rèn)為有用的也主要是init和gen這兩個target。
          其中init用于交互輸入?yún)?shù),而gen是使用xdoclet根據(jù)模板生成Actions/Controllers, Action/Controller Tests, test data, i18n keys and JSPs。

          posted @ 2007-03-15 23:23 云自無心水自閑 閱讀(645) | 評論 (0)編輯 收藏

          這幾天在作Raible的Tutorial,前兩天做了Create Dao & POJO, 今天做Create Manager。
          中間有一些過程與大家分享一下:
          在PersonManagerTest的單元測試中,在Raible的教程中,說需要在applicationContext-service.xml中添加PersonManager這個bean的配置,但是實際上我沒有添加配置,單元測試就成功了,為什么?
          原因:在教程中的Test使用了Mock,好像并沒有真正的使用其他關(guān)聯(lián)的類,現(xiàn)在采用真正的測試類,下面注釋掉的是教程中的測試類。:

          package ?org.appfuse.service;

          // import?java.util.List;

          import ?org.appfuse.model.Person;
          import ?org.springframework.context.support.ClassPathXmlApplicationContext;
          import ?org.springframework.dao.DataAccessException;
          import ?org.springframework.context.ApplicationContext;

          public ? class ?PersonManagerTest? extends ?BaseManagerTestCase? {

          ????
          private ?Person?person? = ? null ;
          ????
          private ?PersonManager?mgr? = ? null ;

          ????
          protected ? void ?setUp()? throws ?Exception? {
          ????????
          super .setUp();
          ????????ApplicationContext?ctx?
          = ? new ?ClassPathXmlApplicationContext( " org/appfuse/service/applicationContext-*.xml " );
          ????????mgr?
          = ?(PersonManager)?ctx.getBean( " personManager " );
          ????}


          ????
          protected ? void ?tearDown()? throws ?Exception? {
          ????????
          super .tearDown();
          ????????mgr?
          = ? null ;
          ????}

          ????
          ????
          public ? void ?testGetPerson()? throws ?Exception? {
          ????????person?
          = ?mgr.getPerson( " 1 " );

          ????????assertNotNull(person.getFirstName());
          ????}


          ????
          public ? void ?testSavePerson()? throws ?Exception? {
          ????????person?
          = ?mgr.getPerson( " 1 " );
          ????????person.setFirstName(
          " test " );

          ????????mgr.savePerson(person);
          ????????assertEquals(person.getFirstName(),?
          " test " );
          ????}


          ????
          public ? void ?testAddAndRemovePerson()? throws ?Exception? {
          ????????person?
          = ? new ?Person();
          ????????person?
          = ?(Person)?populate(person);

          ????????mgr.savePerson(person);
          ????????assertEquals(person.getFirstName(),?
          " Bill " );
          ????????assertNotNull(person.getId());

          ????????log.debug(
          " removing?person,?personId:? " ? + ?person.getId());

          ????????mgr.removePerson(person.getId().toString());

          ????????
          try ? {
          ????????????person?
          = ?mgr.getPerson(person.getId().toString());
          ????????????fail(
          " Person?found?in?database " );
          ????????}
          ? catch ?(DataAccessException?dae)? {
          ????????????log.debug(
          " Expected?exception:? " ? + ?dae.getMessage());
          ????????????assertNotNull(dae);
          ????????}

          ????}

          }



          現(xiàn)在如果不在applicationContext-service.xml中添加bean的配置后,JUnit報錯說找不到personManager。另外還需要把a(bǔ)pplicationContext-hibernate.xml和applicationContext-resources.xml也拷貝到WEB-INF/src/org/appfuse/service目錄下,這樣Context才能Load成功。
          現(xiàn)在運(yùn)行Test,GetPerson和SavePerson都測試通過,而AddAndRemovePerson報了一個NullPointerExceptoin錯誤。原來缺少了PersonManagerTest.properties這個文件,這個文件是用于populate初始化Person實例的。

          posted @ 2007-03-14 15:09 云自無心水自閑 閱讀(776) | 評論 (0)編輯 收藏

          ASAP是一個開源的RIA應(yīng)用庫,主要面向可維護(hù)的、多視頻的、基于事件互動的應(yīng)用開發(fā)。提供實用的、可重用的、基于模式的解決方案。
          目前版本是0.9.4,從他們的網(wǎng)站上看,好像已經(jīng)不少公司已經(jīng)采用了他們的框架。

          主頁:http://asapframework.org/wiki/bin/view/ASAP/

          posted @ 2007-03-13 09:01 云自無心水自閑 閱讀(942) | 評論 (0)編輯 收藏


          最近Adobe公司的一批人在Google的Code Project上發(fā)布了FlexLib,一個開源的Flex2組件庫。
          現(xiàn)有的組件包括:
          ???ConvertibleTreeList,?
          ???Draggable Slider,?
          ???PromptingTextInput,?
          ???Scrollable Menu Controls,?
          ???SuperTabNavigator,?
          ???Alternative Scrolling Canvases,?
          ???Horizontal Accordion

          大家可以去看看。

          另外,還有個人也發(fā)布了一個Flex2 組件目錄: FlexBox。這個網(wǎng)站

          posted @ 2007-03-09 11:46 云自無心水自閑 閱讀(1714) | 評論 (0)編輯 收藏

          ?

          現(xiàn)在有一個方便的做法來根據(jù)選擇Enable/Disable控件。比如:有一個DataGrid和數(shù)個操作數(shù)據(jù)的按鈕,當(dāng)選中某行是激活其中一個按鈕,選中另一行時,激活其中另一個按鈕,等等。

          通常的做法是寫一大堆的if else語句,或者是設(shè)置一堆變量綁定到按鈕上,然后在代碼中設(shè)置這些變量的值,比如:

          [Bindable] private var somethingSelected:Boolean = false;
          <mx:Button label="Publish" click="publishItem()" enabled="{somethingSelected}" />

          這是一個有益的嘗試。所有的依賴于DataGrid狀態(tài)的控件都綁定一個變量。改變變量的值就改變控件的enabled狀態(tài)。但是你還需要確定改變變量值的時機(jī)。比如:

          private function publishItem() : void {
          ???? // get the selected item
          ???? // publish it
          ???? grid.selectedItem = -1; // clear the selection
          ???? somethingSelected = false;
          }

          在復(fù)雜的情況下,假設(shè)有另一個按鈕需要在選中某個特定值時被激活。那么你不僅需要考慮選中對應(yīng)的那個變量,還需要考慮其他按鈕的情況。也就是說,在publishItem函數(shù)中你還需要設(shè)置其他變量的值。

          一個更方便的做法是這樣的。現(xiàn)在我們Publish按鈕和somethingSelected變量進(jìn)行綁定。我們還需要做的是把somethingSelected變量與DataGrid的選中狀態(tài)進(jìn)行關(guān)聯(lián)。對此,我們可以使用<mx:Binding>標(biāo)簽。

          <mx:Binding source="grid.selectedIndex >= 0" destination="somethingSelected" />

          這樣somethingSelected的值與DataGrid的選中狀態(tài)就緊密地聯(lián)系起來了。當(dāng)選中了DataGrid中的某條數(shù)據(jù)時,所有進(jìn)行enabled="{somethingSelected}"綁定的按鈕就被激活。<mx:Binding>標(biāo)簽的source屬性不需要一定是一個變量,完全可以是一個表達(dá)式。

          比如稍微復(fù)雜一點的一個例子:

          <mx:Binding source="grid.selectedItem.code == 1" destination="codeOnePicked" />

          這樣,當(dāng)DataGrid選中行的code字段的值為1時,變量codeOnePicked的值被設(shè)置為true。
          mxml中可以如下定義:

          <mx:CheckBox label="Code One?" selected="{codeOnePicked}" />
          <mx:Button label="Publish" enabled="{somethingSelected && !codeOnePicked}" />

          這樣,當(dāng)選中行的code字段值為1時,上面的復(fù)選框被激活,而下面的按鈕無效。

          posted @ 2007-03-08 22:58 云自無心水自閑 閱讀(3614) | 評論 (0)編輯 收藏

          僅列出標(biāo)題
          共29頁: First 上一頁 17 18 19 20 21 22 23 24 25 下一頁 Last 
          主站蜘蛛池模板: 广平县| 广水市| 江油市| 临夏市| 廉江市| 邵武市| 五指山市| 泗阳县| 钟祥市| 梁山县| 宁强县| 抚远县| 东兴市| 彰化县| 新民市| 伽师县| 九江市| 漠河县| 乌鲁木齐市| 波密县| 泾川县| 互助| 高尔夫| 漾濞| 平顺县| 平乡县| 陈巴尔虎旗| 盖州市| 乐亭县| 台北市| 诸城市| 西吉县| 成都市| 乐陵市| 金阳县| 神农架林区| 尤溪县| 浮梁县| 东阿县| 兰溪市| 诏安县|