Ajaxエンドポイントについて話すとき、ポートレットのserveResource
フェーズについて話しているとします。
あなたがResourceCommandルートに行く場合:はい、名前付きリソースハンドラごとに1つのリソースコマンドが必要です。ただし、このようにする必要はありません。単一のポートレット・クラスに実装することはできます。
1つの違い:あなたは簡単に変更すると、それはあなたが別の行動を必要とするべきで更新できることを意味し、独自のポートレットの制御にいる
。したがって、単一(潜在的により大きい)ポートレット・クラスを使用することは問題ではありません。
一方、Liferayの組み込みコンポーネントは、他の人(たとえばあなた)によって更新される必要があるため、小さなサービスを多くの小さなサービスに分割することは、Liferayの小さな側面を変更しようとするユーザーにとってはすばらしいことです。変更のために気にしている単一のResourceCommandをオーバーライドします。
このように、Liferay全体でResourceCommandパターンを過度に使用することになります。しかし、あなた自身のコードでこれを完全に無視し、個々の名前付きリソースハンドラを1つのクラスで続けることができます。
言われていることは、そのようなポートレットのためのいくつかの擬似コード(だけでは、ここに書かれてコンパイルされたことがないとテスト):
コードの
@Component(...)
public class MyPortlet extends GenericPortlet {
public void serveResource(ResourceRequest req, ResourceResponse res) {
String name = req.getParameter("name");
// handle request for named activity
}
}
(編集:謝罪、私は完全にアクションとリソースのフェーズを混ぜ、代わりに「リソース」よりも「アクション」ロジックを推奨)
また、LiferayのService BuilderまたはRESTを介してポートレットの実装を捨て、Webサービスを実装するだけです。これらのケースでもサンプルが用意されていますが、ポートレットのルートに行くかのように質問が表示されました。
問題は、単一クラス(1つのエンドポイント= switch-case-hell)でLR 7 MVC内で複数のエンドポイントをどのようにルーティングできるかについての一例を見ていないことです。理想的には、.NET MVCのように、すべてのメソッド+追加の論理メソッド( "validate"など)を単一コントローラクラスに書き出し、注釈PERメソッドを使用してルートとユーザーグループの検証を構成できました。 LR7では@component注釈はクラスのメソッドではなく、クラスをターゲットにしているようです。 また、PHP Laravelでは、すべてのメソッドをコントローラに書き込んで、単一のrouter-fileを使用してルートと認証を伝えることができました。 – Janne
はい、@コンポーネント(OSGi宣言型サービスアノテーション)がクラスをターゲットにしています。サンプルの編集済みの回答を参照してください。 –
明確な例をお寄せいただきありがとうございます。 url-generationのどのパラメータにfooまたはbarを指定することができますか?それは/ user/fooや/ user/barのようなクエリパラメータかフレンドリーURLルートですか? – Janne