1

私のプロジェクト チームは、Maven 構造の GWT を使用してブラウザゲームを開発しています。

    • アピ
    • ドメイン
    • サービス
    • 意見

GWT は主にビューで使用され (ビューへの他のモジュールの継承を除く)、そこで国際化を実装しました。これまでのところ、この構成は実行されています。

ここで、ユーザーのビューにスローされるさまざまなエラー メッセージも国際化したいと考えましたが、サービス モジュールから送信されます。したがって、ビュー モジュールと同じプロパティ ファイルにアクセスすると有利です。問題は (明らかに) 親 pom での順序が原因で、サービスからビューにアクセスできないことです。

どこからでもアクセスできるように、国際化インターフェイスを API にアウトソーシングすることは可能でしょうか?

前もって感謝します。


専門分野:

思ったほど簡単ではないか、何か間違ったことをしました。私は自分の問題を専門化して、自分が抱えている問題を調べようとします。

Api モジュール (de.ba.sy.api) 内に Api.gwt.xml があり、そこにあるパッケージを参照しています。

<module>
<!-- <inherits name="de.ba.sy.api.manager.IUserManager" /> -->
<inherits name="com.google.gwt.user.User" />


<!-- Hier können weitere packages eingefügt werden -->
<source path="dao" />
<source path="encoder" />
<source path="entity" />
<source path="exceptions" />
<source path="language" />
<source path="mail" />
<source path="manager" />
<source path="user" />
<source path="validator" />
</module>

インターフェイス ILanguage とプロパティは、言語パッケージ内にあります。

  • de.ba.sy.api.language
    • ILanguage.class
    • ILanguage_de.properties
    • ILanguage_en.properties
    • ILanguage.properties

View-module 内には次の構造があります。

  • de.ba.sy.view
    • Application.gwt.xml (Api モジュールを継承)
    • クライアント
      • アプリケーション.クラス

Application.class には、次のコードがあります。

package view.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.user.client.ui.RootPanel;

import de.ba.sy.api.language.ILanguage;

/**
 * @author stubbe
 * Entry point classes define <code>onModuleLoad()</code>.
 */
public class Application implements EntryPoint {

    /**
     * This is the entry point method.
     */
    public void onModuleLoad() {
        /* Internationalisierung */
        final ILanguage languages = GWT.create(ILanguage.class);

        LoginPageForm login = new LoginPageForm(languages);
        RootPanel.get().add(login);
    }
}

私が言ったように、ILanguage とそのプロパティを View モジュール内に保持しても問題はありませんが、それを Api モジュールに移動すると、次のようになります。

[INFO] --- gwt-maven-plugin:2.5.0-rc1:compile (default-cli) @ View ---
[INFO] auto discovered modules [view.Application]
[INFO] Compiling module view.Application
[INFO]    Validating units:
[INFO]       Ignored 5 units with compilation errors in first pass.
[INFO] Compile with -strict or with -logLevel set to TRACE or DEBUG to see all errors.
[INFO]    Computing all possible rebind results for 'de.ba.sy.api.language.ILanguage'
[INFO]       Rebinding de.ba.sy.api.language.ILanguage
[INFO]          Invoking generator com.google.gwt.i18n.rebind.LocalizableGenerator
[INFO]             Processing interface de.ba.sy.api.language.ILanguage
[INFO]                Generating method body for email()
[INFO]                   [ERROR] No resource found for key 'email'
[INFO] com.google.gwt.i18n.rebind.AbstractResource$MissingResourceException: No resource found for key 'email'
[INFO]  at com.google.gwt.i18n.rebind.MessagesMethodCreator.createMethodFor(MessagesMethodCreator.java:1086)
[INFO]  at com.google.gwt.i18n.rebind.AbstractLocalizableImplCreator.delegateToCreator(AbstractLocalizableImplCreator.java:501)
[INFO]  at com.google.gwt.i18n.rebind.MessagesImplCreator.emitMethodBody(MessagesImplCreator.java:92)
[INFO]  at com.google.gwt.user.rebind.AbstractGeneratorClassCreator.genMethod(AbstractGeneratorClassCreator.java:277)
[INFO]  at com.google.gwt.user.rebind.AbstractGeneratorClassCreator.emitMethods(AbstractGeneratorClassCreator.java:239)
[INFO]  at com.google.gwt.user.rebind.AbstractGeneratorClassCreator.emitClass(AbstractGeneratorClassCreator.java:118)
[INFO]  at com.google.gwt.i18n.rebind.AbstractLocalizableImplCreator.generateConstantOrMessageClass(AbstractLocalizableImplCreator.java:225)
[INFO]  at com.google.gwt.i18n.rebind.LocalizableGenerator.generate(LocalizableGenerator.java:151)
[INFO]  at com.google.gwt.i18n.rebind.LocalizableGenerator.generate(LocalizableGenerator.java:124)
[INFO]  at com.google.gwt.core.ext.IncrementalGenerator.generateNonIncrementally(IncrementalGenerator.java:40)
[INFO]  at com.google.gwt.dev.javac.StandardGeneratorContext.runGeneratorIncrementally(StandardGeneratorContext.java:657)
[INFO]  at com.google.gwt.dev.cfg.RuleGenerateWith.realize(RuleGenerateWith.java:41)
[INFO]  at com.google.gwt.dev.shell.StandardRebindOracle$Rebinder.rebind(StandardRebindOracle.java:79)
[INFO]  at com.google.gwt.dev.shell.StandardRebindOracle.rebind(StandardRebindOracle.java:276)
[INFO]  at com.google.gwt.dev.shell.StandardRebindOracle.rebind(StandardRebindOracle.java:265)
[INFO]  at com.google.gwt.dev.DistillerRebindPermutationOracle.getAllPossibleRebindAnswers(DistillerRebindPermutationOracle.java:91)
[INFO]  at com.google.gwt.dev.jjs.impl.UnifyAst$UnifyVisitor.handleGwtCreate(UnifyAst.java:355)
[INFO]  at com.google.gwt.dev.jjs.impl.UnifyAst$UnifyVisitor.handleMagicMethodCall(UnifyAst.java:433)
[INFO]  at com.google.gwt.dev.jjs.impl.UnifyAst$UnifyVisitor.endVisit(UnifyAst.java:237)
[INFO]  at com.google.gwt.dev.jjs.ast.JMethodCall.traverse(JMethodCall.java:243)
[INFO]  at com.google.gwt.dev.jjs.ast.JModVisitor.traverse(JModVisitor.java:361)
[INFO]  at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:273)
[INFO]  at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:265)
[INFO]  at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:116)
[INFO]  at com.google.gwt.dev.jjs.ast.JCastOperation.traverse(JCastOperation.java:65)
[INFO]  at com.google.gwt.dev.jjs.ast.JModVisitor.traverse(JModVisitor.java:361)
[INFO]  at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:273)
[INFO]  at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:265)
[INFO]  at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:116)
[INFO]  at com.google.gwt.dev.jjs.ast.JCastOperation.traverse(JCastOperation.java:65)
[INFO]  at com.google.gwt.dev.jjs.ast.JModVisitor.traverse(JModVisitor.java:361)
[INFO]  at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:273)
[INFO]  at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:265)
[INFO]  at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:116)
[INFO]  at com.google.gwt.dev.jjs.ast.JDeclarationStatement.traverse(JDeclarationStatement.java:48)
[INFO]  at com.google.gwt.dev.jjs.ast.JModVisitor$ListContextImmutable.traverse(JModVisitor.java:170)
[INFO]  at com.google.gwt.dev.jjs.ast.JModVisitor.acceptWithInsertRemoveImmutable(JModVisitor.java:336)
[INFO]  at com.google.gwt.dev.jjs.ast.JBlock.traverse(JBlock.java:83)
[INFO]  at com.google.gwt.dev.jjs.ast.JModVisitor.traverse(JModVisitor.java:361)
[INFO]  at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:273)
[INFO]  at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:137)
[INFO]  at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:133)
[INFO]  at com.google.gwt.dev.jjs.ast.JMethodBody.traverse(JMethodBody.java:82)
[INFO]  at com.google.gwt.dev.jjs.ast.JModVisitor.traverse(JModVisitor.java:361)
[INFO]  at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:273)
[INFO]  at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:265)
[INFO]  at com.google.gwt.dev.jjs.ast.JMethod.visitChildren(JMethod.java:426)
[INFO]  at com.google.gwt.dev.jjs.ast.JMethod.traverse(JMethod.java:395)
[INFO]  at com.google.gwt.dev.jjs.ast.JModVisitor.traverse(JModVisitor.java:361)
[INFO]  at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:273)
[INFO]  at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:265)
[INFO]  at com.google.gwt.dev.jjs.impl.UnifyAst.mainLoop(UnifyAst.java:902)
[INFO]  at com.google.gwt.dev.jjs.impl.UnifyAst.exec(UnifyAst.java:627)
[INFO]  at com.google.gwt.dev.jjs.JavaToJavaScriptCompiler.precompile(JavaToJavaScriptCompiler.java:604)
[INFO]  at com.google.gwt.dev.jjs.JavaScriptCompiler.precompile(JavaScriptCompiler.java:33)
[INFO]  at com.google.gwt.dev.Precompile.precompile(Precompile.java:278)
[INFO]  at com.google.gwt.dev.Precompile.precompile(Precompile.java:229)
[INFO]  at com.google.gwt.dev.Precompile.precompile(Precompile.java:141)
[INFO]  at com.google.gwt.dev.Compiler.run(Compiler.java:232)
[INFO]  at com.google.gwt.dev.Compiler.run(Compiler.java:198)
[INFO]  at com.google.gwt.dev.Compiler$1.run(Compiler.java:170)
[INFO]  at com.google.gwt.dev.CompileTaskRunner.doRun(CompileTaskRunner.java:88)
[INFO]  at com.google.gwt.dev.CompileTaskRunner.runWithAppropriateLogger(CompileTaskRunner.java:82)
[INFO]  at com.google.gwt.dev.Compiler.main(Compiler.java:177)
[INFO]                   [WARN] Searched the following resources:
[INFO]    [ERROR] Errors in 'view/client/Application.java'
[INFO]       [ERROR] Line 23: Failed to resolve 'de.ba.sy.api.language.ILanguage' via deferred binding
[INFO]    [WARN] For the following type(s), generated source was never committed (did you forget to call commit()?)
[INFO]       [WARN] de.ba.sy.api.language.ILanguage_

ありがとうございました。私はGWTを始めたばかりなので、これが些細なことかどうかはわかりません。

4

2 に答える 2

3

GWT 2.5 以降GWT.create()、引数として渡されたクラスの登録済みプロバイダーがあれば、JVM (つまりサーバー上) で使用できます。また、国際化が組み込まれているため、インターフェイスを使用GWT.create()してサーバーで呼び出すことができます。

あなたの質問に答えるには: はい、インターフェイスとプロパティ ファイルを Api モジュールに移動できます。


com.google.gwt.core.shared.GWTではなく、クラスを使用する必要があることに注意してくださいcom.google.gwt.core.client.GWT

于 2012-09-25T12:55:29.743 に答える
0

これを行う 1 つの方法は、サーバーからスローされる可能性のあるさまざまな種類のエラーのカスタム列挙を作成することです。次に、列挙型のインスタンス変数を使用して、サーバーからスローされた例外内にエラーの型を設定できます。例外を受け取ると、クライアントは列挙値を「実際の」エラー メッセージに変換します。ほとんどの場合、switch-case ステートメントを使用します。

列挙型の代わりに複数の例外タイプを使用して同じことを行うこともできますが、個人的には列挙型を使用することを好みます。

于 2012-09-25T13:23:22.923 に答える