6

以下の例外がスローされる理由を解明しようとしています。

ポートレットが「表示」モードでアクセスされたためだと思いますが、Springサーブレットコンテナがリクエストを処理できなかったことがわからないため、これは正しいですか?

以下の例外セットの「パラメータマップ」はどこにありますか?

org.springframework.web.portlet.NoHandlerFoundException:ポートレット要求に一致するハンドラーメソッドが見つかりません:モード'view'、フェーズ'ACTION_PHASE'、パラメーターmap [empty]

これがコントローラーです:

@Controller
@RequestMapping("VIEW")
public class DetailsController {
    @RequestMapping("VIEW")
    public String showDetails(final ModelMap modelMap, final RenderRequest renderRequest) {
        return "allDetails/details";
    }
}
4

2 に答える 2

6

私が思いつく 3 つのアイデアを次に示します (コントローラーの呼び出し方法を知っておくと役立ちます)。それらの 1 つまたは組み合わせを試して、うまくいったかどうか教えてください。

アイデア 1 :("VIEW") showDetails @RequestMapping アノテーションを削除します。

...
public class DetailsController {

    @RequestMapping
    public String showDetails(final ModelMap modelMap, final RenderRequest renderRequest) {
        return "allDetails/details";
    }

}

これは、呼び出し元の JSP に次のようなものがある場合に機能します: <portlet:actionURL/>: showDetails がデフォルトのレンダリング メソッドになります。

アイデア 2 : @RequestMapping メソッド アノテーションのアクション パラメーターを指定します。

...
public class DetailsController {

    @RequestMapping(params = "action=viewDetails")
    public String showDetails(final ModelMap modelMap, final RenderRequest renderRequest) {
        ...
    }

}

これは、呼び出し元の JSP に次のようなものがある場合に機能します。

<portlet:actionURL ... >
    <portlet:param name="action" value="viewDetails">
</portlet:actionURL>

アイデア 3 :アクション フェーズに空のメソッドを追加します。

...
public class DetailsController {

    @RequestMapping(params = "action=viewDetails")    // render phase
    public String showDetails(final ModelMap modelMap, final RenderRequest renderRequest) {
        ...
    }

    ...
    // Empty method
    @RequestMapping(params = "action=viewDetails")    // action phase
    public void actionMethod() {
    }

}

これは、呼び出し元の JSP に次のようなものがある場合に機能します。

<portlet:actionURL ... >
    <portlet:param name="action" value="viewDetails">
</portlet:actionURL>
于 2012-10-09T19:57:04.367 に答える
2

ここで最初に確認する点がいくつかあります。

  1. jsp からコントローラーに渡されるパラメーターはありますか?
  2. 空のパラメータ シナリオを処理するデフォルトの Action メソッドはありますか?

最初の質問に対する答えが「はい」の場合、jsp には次のような actionURL タグが必要です...

        <portlet:actionURL var="myAction">
           <portlet:param name="paramName" value="paramVal" />
        </portlet:actionURL>
        <form:form action="${myAction}"...

およびコントローラーの対応するActionMapping ...

        @ActionMapping(params = "paramName=paramVal" )
        public void myAction....

2 番目の質問の答えが「いいえ」の場合は、Controller でデフォルトのアクション メソッドを次のように定義します。

       @ActionMapping(param="!action") 
       public void defaultAction....

お役に立てれば!

于 2012-10-08T12:03:17.637 に答える