1


Play フレームワーク 2.1 を使用していますが、奇妙なエラーが発生しました。
サブフォルダー内のコントローラーを移動しようとしています。es:

コントローラー ->
- Application.java
- ページ ->
- - - -Index.java
- - - -Second.java


そして私が持っているルートで:

GET / controllers.pages.Index.main();

エラー:

値 main はオブジェクト controllers.pages.Index のメンバーではありません


バグですか?よろしくニコラ



解決済み バグが見つかりました: 親クラスのメソッドにアクセスできません。オーバーライドする必要があります:

public static Result main(String page, String method)
{
    return ParentClass.main(page,method);
}
4

1 に答える 1

1

最終的なPlay2.1で修正されたとは思いません(または何かを見逃しました)-子クラスで「オーバーライド」されていないメソッドへのルートは、依然としてエラーを返します。

JavaでのAFAIKは、静的メソッドを実際にオーバーライドすることはまったくできません。

とにかく...設計によるすべてのアクションは静的メソッドであるため、使用Child.methodOfParent()できる間はルートを使用する必要はありません。Parent.methodOfParent()ソリューションとして表示しているものは、のoverloading代わりに検討する必要がありoverridingます。

一方、私の観点からは、このパターンをまったく使用しないことをお勧めします。Playのアクションは、他のアクションとは独立して機能する別個のメソッドである必要があります。両方のアクションで(ほぼ)同じ機能を使用する必要がある場合は、他の静的メソッド(アクションではない)を使用する方がよいでしょう。新しいutilsパッケージで、パラメータを使用して両方のアクションの本体を処理します。ご覧のとおり、私見ではより安全なアプローチになります。まだいくつかの「不明」があります。

于 2013-02-11T07:48:42.157 に答える