2011年12月26日 星期一

【BlazeDS】ResultEvent.result null value

在這裡分享一個問題我遇到的問題

當時開發的Flex SDK 是 4.0 的,其中有運用 BlazeDS 去乎較遠端的J2EE程式

不過當呼叫完成後需要取值將它轉成 Flex 的 ArrayCollection 的時候

遇到點問題

我在 Debug 的模式下觀看取得結果的狀態

例如以下片段程式


private function onGetSuggestGiftResult(event:ResultEvent):void
{
    dgData = (event.result) as ArrayCollection;
}


在 event.result 的時候其實是還有數筆資料的

但是當 FLEX 值型將它轉換成 ArrayCollection 型態時  瞬間變成 null 值

這問題困惱我很久

之後不知道為什麼覺得是 SDK的問題 ((靈機乍現

把SDK調成 4.1 之後  這樣的 bug 就沒了

不知道為什麼  不過在這邊分享出來給大家摟

2011年12月22日 星期四

【Flex】outerDocument 介紹

在 Flex 的程式中可以透過 outerDocumet 來呼叫複葉面所宣告的方法或變數

以下用一個 DataGrid 的範例,其中有一個 DataGridColumn 中會運用一個 itemRenderer

並表示一個 CheckBox 元件 如下所示


<mx:DataGridColumn dataField="gift_id" headerText="選擇" textAlign="center">
    <mx:itemRenderer>
        <mx:Component>
            <mx:HBox>
                <mx:CheckBox />
            </mx:HBox>
        </mx:Component>
    </mx:itemRenderer>
</mx:DataGridColumn>


這時候 CheckBox 這個原件所存在的 Component 就並非 DataGrid 元件的Component

如果要做到當 CheckBox 被選擇時,要將被選擇的物件加入到一個集合(ArrayCollection)

就可以稍為運用一下 outerDocument,如下所示:

<mx:CheckBox click="outerDocument.handleClick(event);"/>

這時候父頁面就需要提供一個 handleClick 的 function


public function handleClick(event:Event):void
{

    if(event.target.selected == true){
        selGiftTemp.addItem(dg.selectedItem);
    }else{
        var index:int = selGiftTemp.getItemIndex(dg.selectedItem);
        selGiftTemp.removeItemAt(index);
    }
}

2011年12月21日 星期三

【DWR】使用 DWR 取得 JavaBean

這篇介紹在DWR的運用下,透過 Javascript 乎教遠端的 Java 方法

並回傳一個 JavaBean 的物件,最後呈現在網頁上

這也是一個典型的 Java 與 Javascript 物件之件的轉換,以下來看看範例吧

首先環境就不多說了,可以看,上一篇文章

一開始我們先定義一個 JavaBean

package org.bean;
public class PersonBean 
{
    private String name;
    private String dollar;
 
    public PersonBean(){}
 
    // getter&setter 省略
}
接著同樣的要定義一個遠端的服務,透過Javascript 呼叫 它會建立一個 PersonBean 並將這個物件回傳回去
package org.service;
import org.bean.PersonBean;
public class PersonService{
    public PersonBean getPerson(){
        PersonBean personbean = new PersonBean();
        personbean.setDollar("1000");
        personbean.setName("Allen");
        return personbean;
    }
}
最後要定義 dwr.xml

2011年12月19日 星期一

【DWR】範例

最近因為打工又要學一些東西,這次是 DWR。以下先介紹它一下巴

簡單說它簡化了AJAX的開發在一個以Java為主的WEB應用上

它的範疇主要是在 Javascript to Java 的一種 RPC 框架  跟ZK比起來就比較不一樣了

更進一步解釋就是它能夠讓你在前端的網頁程式中運用 Javascript 遠端呼叫

Java 的程式,也可以讓Javascript 接收 Java 端自定義的 Bean。

以下用一個簡單的範例來呈現 DWR

首先環境是 Apache Tomcat 6,並去http://directwebremoting.org/dwr/downloads/ 下載JAR檔

額外補充的是 DWR 需要用到 Apache 的開源套件 commons-logging

所以還是要去 http://commons.apache.org/logging/download_logging.cgi 在下載JAR檔

下載完成後同樣先透過 Eclipse 建立一個 Dynamic Web Project

並將這兩個 JAR 檔放到 WEB-INF/lib 裡,完成後就可以寫個 Hello world 的程式

第一步驟要先在 WEB-INF/web.xml 加上一段程式

2011年12月8日 星期四

Hibernate 教學 - org.hibernate.exception.SQLGrammarException: could not load an entity

這是小弟我第一次這麼想發文.... 原因有點無言

不過跟大家分享一下  今天在寫 Spring + Hibernate 的範例與文件 資料庫用的是 MySQL

當我在加載一個類別 Order 時發生了以下錯誤


org.springframework.dao.InvalidDataAccessResourceUsageException: could not load an entity: [org.model.Order#1]; SQL [select order0_.orderId as orderId2_0_, order0_.orderTitle as orderTitle2_0_, order0_.orderDate as orderDate2_0_, order0_.orderReceiver as orderRec4_2_0_ from ORDER order0_ where order0_.orderId=?]; nested exception is org.hibernate.exception.SQLGrammarException: could not load an entity: [org.model.Order#1]
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException


一開始爬文有人說是映射文件與Order類別的關聯可能有寫錯

例如屬性名稱打錯之類的....

但是檢查了老半天都沒錯阿

2011年12月6日 星期二

設計模式 - Builder

關於 Design Pattern 的 Builder(生成器)模式,有以下幾個特點

1. 將物件的複雜建立過程封裝起來,不讓Client知道

2. 能將複雜的組件建立與組件的操作分開

3. 每個 Builder 都是各自獨立,維護方便

4. 使用相同的建造過程但是產生不同的物件

底下用一個 Java 範例來呈現 Builder 模式 的範例

首先一個電腦 (AbstractComputer) 會由很多組件(AbstractComputerItem)所組成

這些組件例如以下
處理器(AbstractCpu)
螢幕(AbstractMonitor)
應用程式(AbstractApp)
硬碟(AbstractDisk)
鍵盤(AbstractKeyboard)