MVCレンダリングコマンド

MVCレンダリングコマンド

ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、こちらまでご連絡ください。

あなたはここにいる場合は、あなたが知っているの手段ということを MVCRenderCommand秒をするために使用されている URLをレンダリングするポートレットへの対応、あなたはコマンドをレンダリングMVCを作成して使用する方法を知りたいです。 LiferayのMVCポートレットフレームワーク全般について知りたいだけの場合、その情報は 別の記事ます。

最初に、ビューレイヤー を

設定し、 <portlet:renderURL> を使用してJSPにレンダリングURLを作成します。 たとえば、次のレンダーURLは、 / hello / edit_entryという名前のMVCレンダーコマンドを呼び出します。 これにより、ユーザーは編集用のフォームを含むページに誘導されます。

<portlet:renderURL var="editEntryURL">
    <portlet:param name="mvcRenderCommandName" value="/hello/edit_entry" />
    <portlet:param name="entryId" value="<%= String.valueOf(entry.getEntryId()) %>" />
</portlet:renderURL>

mvcRenderCommandName という名前の <portlet:param> は、レンダリングURLを宣言します。 entryId という名前の <portlet:param> は、ポートレットレンダリングURLオブジェクトを保持する変数を宣言します。 その変数を、ボタンやメニュー項目などのUIコンポーネントに割り当てます。 ユーザーがUIコンポーネントをトリガーすると、レンダリングURLに一致する * MVCRenderCommand クラスがレンダリング要求と応答を処理します。

特定のポートレット表示URLが呼び出されたときに何をしたいですか? MVCRenderCommand インターフェイス を実装し、その render メソッドをオーバーライドすることにより、独自のロジックを実行してJSPをレンダリングできます。 以下のようないくつかの * MVCRenderCommand、常に同じJSPをレンダリングします。

public class BlogsViewMVCRenderCommand implements MVCRenderCommand {

    @Override
    public String render(
        RenderRequest renderRequest, RenderResponse renderResponse) {

        return "/blogs/view.jsp";
    }

}

その他 * MVCRenderCommand、条件に基づいてJSPをレンダリングします。

@Override
public String render(
    RenderRequest renderRequest, RenderResponse renderResponse)
    throws PortletException {

    try {
        ActionUtil.getEntry(renderRequest);
    }
    catch (Exception e) {
        if (e instanceof NoSuchEntryException ||
            e instanceof PrincipalException) {

            SessionErrors.add(renderRequest, e.getClass());

            return "/hello/error.jsp";
        }
        else {
            throw new PortletException(e);
        }
    }

    return "/hello/edit_entry.jsp";
}

上記のメソッドで、 ActionUtil.getEntry呼び出しで例外がスローされない場合、メソッドは /hello/edit_entry.jspレンダリングします。 NoSuchEntryException がスローされると、 /hello/error.jspレンダリングされます。 他の例外がスローされた場合、メソッドはそれを PortletExceptionとして再スローします。

特定のレンダーURLに応答するには、 MVCRenderCommand は、これらのプロパティを指定するOSGi宣言サービスコンポーネント(@Componentアノテーション付き)である必要があります。

  • javax.portlet.name
  • mvc.command.name

これらの2つのプロパティの例を次に示します。

 "javax.portlet.name=" + HelloWorldPortletKeys.HELLO_WORLD,
 "mvc.command.name=/hello/edit_entry"

この場合のポートレット名は、定数 HelloWorldPortletKeys.HELLO_WORLDによって定義されます。 mvc.command.name/ hello / edit_entryに設定されています。これは、MVCレンダーコマンドがエントリの編集に関連していることを示しているようです。

コンポーネントは、 MVCRenderCommand.class サービスとしてOSGiランタイムに公開する必要もあります。 サンプルプロパティを指定し、 MVCRenderCommand.class サービスとして自身を公開する基本的なコンポーネントを次に示します。

@Component(
    immediate = true,
    property = {
       "javax.portlet.name=" + HelloWorldPortletKeys.HELLO_WORLD,
       "mvc.command.name=/hello/edit_entry"
    },
    service = MVCRenderCommand.class
)
public class EditEntryMVCRenderCommand implements MVCRenderCommand {
    ...
}

mvc.command.name value / hello / edit_entry は、前述の portlet:renderURLmvcRenderCommand パラメーターの値と一致します。 そのレンダリングURLは、この * MVCRenderCommand クラスを呼び出します。 実際、 mvcRenderCommand/ hello / edit_entry であるこのポートレット(HelloWorldPortletKeys.HELLO_WORLD)のJSPのレンダリングURLは、この * MVCRenderCommand呼び出します。

MVCRenderCommand を複数のポートレットに応答させるには、それらをポートレット名に割り当てられた javax.portlet.name プロパティとして @Component に追加します。 同様に、複数のレンダリングURLに応答させるには、それらを mvc.command.name プロパティとして追加します。 本当にワイルドに感じている場合は、次のように、同じコマンドコンポーネントで複数のポートレットと複数のコマンドURLを指定できます。

@Component(
    immediate = true,
    property = {
       "javax.portlet.name=" + HelloWorldPortletKeys.HELLO_MY_WORLD,
       "javax.portlet.name=" + HelloWorldPortletKeys.HELLO_WORLD,
       "mvc.command.name=/hello/edit_super_entry",
       "mvc.command.name=/hello/edit_entry"
    },
    service = MVCRenderCommand.class
)

ご覧のとおり、MVCレンダリングコマンドは実装が簡単で、複数のポートレットの複数のコマンド名に応答できます。

関連トピック

MVCポートレットの作成

MVCリソースコマンド

MVCアクションコマンド

MVCコマンドのオーバーライド

« MVCアクションコマンドMVCリソースコマンド »
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています