2012-09-27 77 views
0

我正在嘗試創建一個動作,在該動作中服務器需要通過線路向客戶端通過GWTP動作響應對象的數組列表。如何通過GWTP動作通過線路傳輸對象的數組列表

Category類

package com.business.share; 

import java.io.Serializable; 
import javax.persistence.Entity; 
import javax.persistence.Id; 

public class Category implements Serializable{ 
    Long id; 
    protected String name; 
    protected String description; 
    protected boolean status; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

    public boolean getStatus() { 
     return status; 
    } 

    public void setStatus(boolean status) { 
     this.status = status; 
    } 
} 

GetCategories類

package com.business.client.action; 

import java.util.ArrayList; 
import com.gwtplatform.dispatch.shared.ActionImpl; 
import com.business.client.action.GetCategoriesResult; 
import com.business.share.Category; 

public class GetCategories extends ActionImpl<GetCategoriesResult> { 
    private ArrayList<Category> categories; 
    @SuppressWarnings("unused") 
    public GetCategories() { 
     // For serialization only 
    } 

    public GetCategories(ArrayList<Category> categories) { 
     this.categories = categories; 
    } 

    public ArrayList<Category> getCategories() { 
     return categories; 
    } 
} 

GetCategoriesResult類

package com.business.client.action; 

import java.util.ArrayList; 
import com.gwtplatform.dispatch.shared.Result; 
import com.business.share.Category; 
public class GetCategoriesResult implements Result { 
    private ArrayList<Category> categories; 
    @SuppressWarnings("unused") 
    private GetCategoriesResult() { 
     // For serialization only 
    } 

    public GetCategoriesResult(ArrayList<Category> categories) { 
     this.categories = categories; 
    } 

    public ArrayList<Category> getCategories() { 
    return categories; 
    } 
} 

GetCategoriesActionHandler類

package com.business.server.handler; 

import java.util.ArrayList; 
import com.gwtplatform.dispatch.server.actionhandler.ActionHandler; 
import com.business.client.action.GetCategories; 
import com.business.client.action.GetCategoriesResult; 
import com.business.share.Category; 
import com.google.inject.Inject; 
import com.googlecode.objectify.Objectify; 
import com.googlecode.objectify.ObjectifyService; 
import com.googlecode.objectify.Query; 
import com.gwtplatform.dispatch.server.ExecutionContext; 
import com.gwtplatform.dispatch.shared.ActionException; 

public class GetCategoriesActionHandler implements 
    ActionHandler<GetCategories, GetCategoriesResult> { 

    @Inject 
    public GetCategoriesActionHandler() { 
    } 

    @Override 
    public GetCategoriesResult execute(GetCategories action, 
     ExecutionContext context) throws ActionException { 

     ArrayList<Category> categories = new ArrayList<Category>(); 

     // dummy data  
     Category cat1 = new Category(); 
     cat1.setName("cat1"); 
     cat1.setDescription("cat1 desc"); 
     cat1.setStatus(true); 
     Category cat2 = new Category(); 
     cat1.setName("cat2"); 
     cat1.setDescription("cat2 desc"); 
     cat1.setStatus(false); 
     categories.add(cat1); 
     categories.add(cat2); 
     return new GetCategoriesResult(categories); 
    } 

    @Override 
    public void undo(GetCategories action, GetCategoriesResult result, 
     ExecutionContext context) throws ActionException { 
    } 

    @Override 
    public Class<GetCategories> getActionType() { 
     return GetCategories.class; 
    } 
} 

這是CategoryPresenter中的一段代碼,它將異步發送到服務器。

@Override 
protected void onReset() { 
    super.onReset(); 
    GetCategories getCategoriesAction = new GetCategories(); 
    dispatchAsync.execute(getCategoriesAction, getCategoriesCallback); 
} 

private final AsyncCallback<GetCategoriesResult> getCategoriesCallback = 
    new AsyncCallback<GetCategoriesResult>() { 

    @Override 
    public void onFailure(Throwable caught) { 
    } 

    @Override 
    public void onSuccess(GetCategoriesResult result) { 
     getView().getCategoryListBox().clear(); 
     ArrayList<Category> categories = result.getCategories(); 
     for(Category category : categories) { 
      getView().getCategoryListBox().addItem(category.getName()); 
     } 
    } 
}; 

我不知道這段代碼有什麼問題,但GWT編譯器總是給出這樣的錯誤。

編譯模塊com.business.Business 驗證新編譯單位 忽略3個單位在第一遍編譯錯誤。 使用-strict編譯或使用-logLevel設置爲TRACE或DEBUG以查看所有錯誤。 查找入口點類別 [錯誤]'文件中的錯誤:/。blah..blah..blah ../ businessapp/src/com/business/client/presenter/CategoryPresenter.java' [錯誤]第75行:否源代碼可用於com.business.share.Category類型;你忘了繼承一個必需的模塊嗎? [錯誤]'file:/。blah..blah..blah ../ businessapp/src/com/business/client/action/GetCategoriesResult.java'中的錯誤' [錯誤]第11行:沒有源代碼可用於鍵入com.business.share.Category;你忘了繼承一個必需的模塊嗎? [錯誤]無法找到類型'com.business.client.Business' [錯誤]提示:以前的編譯器錯誤可能導致此類型不可用 [錯誤]提示:檢查模塊的繼承鏈;它可能不是繼承所需的模塊或模塊可能沒有正確添加其源路徑條目

以下此錯誤消息,這意味着,com.business.share.Category未找到,但此文件是物理已經存儲在該軟件包中。我不明白爲什麼GWT找不到它。我注意到任何我稱之爲Category類的東西,它總是帶來這個錯誤。 有人知道發生了什麼?編輯] 問題已解決。 在我Business.gwt.xml,我有

<source path='shared'/> 

但我的股票包com.business.share(不含d) 我只是重新命名共享包名稱共享。

回答

0

嘗試將一個空構造函數添加到Category類。

+0

感謝您的回覆,但仍然沒有運氣。 – varmansvn

+0

檢查'Category'的包名稱。它應該'共享'而不是共享' – Sydney

+0

任何人都解決了這個問題? – Bennet