0

サーバーがオブジェクトの配列リストをネットワーク経由で GWTP アクションを介してクライアントに応答する必要があるアクションを作成しようとしています。

カテゴリ クラス

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 に設定してコンパイルすると、すべてのエラーが表示されます。エントリ ポイント クラスの検索 [エラー] 'file:/.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 なし) です。パッケージ名を share から shared に変更しただけです。

4

1 に答える 1

0

Categoryクラスに空のコンストラクターを追加してみてください。

于 2012-09-28T05:49:42.490 に答える