2012-04-03 10 views
1

から動的にオブジェクトをキャスト:が、私はこの質問の解決策として、サーブレット・フィルターを書いている文字列

Is it a good idea to filter inside a JSF template?

今、アイデアはすべてprivilegiesをチェックして与えることは大きなフィルタを作成することです特定のユーザーにアクセスするかどうかを指定します。 すべてのサブアプリケーションのすべての特権を含むMapを作成し、KeyとしてサブアプリケーションのID(Long値)を持ち、他の重要な情報を含む別のMapの値を持ちます。 コントローラクラスの名前はclass1Controller、class2Controller eccで、サブアプリケーションはclass1、class2 ecc ... という名前のフォルダに格納されています。最後に言うべきことは、すべてのクラスにはapplicationIDというパラメータがあります。私が前に述べた地図。 それで、私は何をしますか? 私はHttpServletRequestのからgetRequestURI()メソッドを使用して、ユーザーが訪問したサブアプリケーションを取得することができ、問題は、私は、そのアプリケーションにリンクされているクラスからアプリケーションIDを取るべきであるということですので、私はこのコードを書いた:



    Long id= ((Class.forName(packageName+applicationName+"Controller"))session.getAttribute(applicationName+"Controller")).getApplicationId(); 

問題は、コンパイラがgetApplicationId()メソッドを見つけることができないことを返すことです! この問題を解決するために何かできますか?あるいは私はそれを行う別の方法を見つける必要がありますか?

+0

可能な複製[Javaでクラスをキャスト](http://stackoverflow.com/questions/9125671/cast-a-class-in-java) –

答えて

1

私が言わなければならない最後のことは、すべてのクラスは、アプリケーションID

というパラメータを持っているあなたがgetApplicationId方法とインタフェースをしたいようですねということです。すべてのコントローラーにそのインターフェースを実装させてから、そのインターフェースにキャストするだけです。

// TODO: Work out a better interface name than "Application" :) 
Object attribute = session.getAttribute(applicationName+"Controller"); 
Long id = ((Application) attribute).getApplicationId(); 

(あなたがBalusCによって記載されているように、抽象基本クラスを使用する場合があります - 。彼らは本当に、同じテーマのバリエーションです)

1

あなたはClassインスタンス上getApplicationId()を呼んでいるが、それその方法はまったくありません。

一般的なアプローチは、すべてのそれらのクラスに、いくつかの共通基本抽象クラスまたはメソッドが定義されたインターフェイスを拡張し、代わりにその基本抽象クラスまたはインターフェイスにキャストすることです。

など。基本抽象クラスを持つ:

public class FooController extends BaseController {} 
public class BarController extends BaseController {} 

など。

どこにこのような基本抽象クラスを見て次のようにあなたがそれを得ることができます次に

public abstract class BaseController { 

    public Long getApplicationId() { 
     return applicationId; 
    } 

} 

Long id = ((BaseController) session.getAttribute(applicationName + "Controller")).getApplicationId(); 
+0

ありがとう...私はすでにその抽象クラスを持っており、それはすでに私はそれを使用するとは思わなかった... – Filippo1980

+0

あなたは大歓迎です。 – BalusC

関連する問題