3

ポートレット用のSpringMVCを使用していますが、問題が見つかりました。

オブジェクトリストをアクションフェーズからレンダリングフェーズに渡す必要があります。私は次のようなsetRenderParameterを使用しようとしました:

actionresponse.setRenderParameter(String string, String[] strings);
actionresponse.setRenderParameter("myList",myList.toString());

ここに2つの方法があります:

@RequestMapping(params = ACTION_MYACTION)
public final void doAction(MyBean search, Errors errors, ActionRequest actionrequest, ActionResponse actionresponse) {
    String processName = UtilLog.getProcessName(CLASS_NAME, "doAction");
    successMessage.clear();
    justlist = null;

    validateBean(consulta, errors);

    if (!errors.hasErrors()) {
        try {

            mylist = myBpelImpl.getList(search);
    actionresponse.setRenderParameter("myList",myList.toString());

        } catch (Exception ex) {
            LOG.error(processName, ex);
            processError(actionrequest, null, ex);
        }
    }

    informSuccessMessage(actionrequest, errors, status);

}

@RequestMapping(params = ACTION_MYACTION)
public final String doRender(@ModelAttribute(value = "myBean") MyBean search, Errors errors, RenderRequest renderrequest) {

List<otherBean> mylist =   renderrequest.getParameter("myList");

    renderrequest.setAttribute(ServletContextKeys.SC_JUSTIFICANTE_LIST, myList);

    return ServletContextKeys.SC_CONSULTA_JUSTIFICANTES;

}

ただし、レンダリングフェーズでは、文字列をオブジェクトリストに変換できないため、これは機能しません。どうすればこれを行うことができますか..?

最初は、クラスレベルでプライベートリストマイリストを使用していましたが、私が知る限り、コントローラーはシングルトンパターンであるため、このアプローチを使用することはできません。

4

3 に答える 3

1

次のように ActionRequest リクエスト オブジェクトをメソッド シグネチャに追加し、オブジェクトを属性として追加します。

@ActionMapping(params = "doAction=searchDeviceResults")
public void searchResults(@ModelAttribute(value = "searchForm") SearchForm searchForm,
                          BindingResult bindingResult, 
                          ActionRequest request, 
                          ActionResponse response, 
                          SessionStatus sessionStatus) {

    searchFormValidator.validate(searchForm, bindingResult);

    if (!bindingResult.hasErrors()) {
        response.setRenderParameter("doAction", "showDeviceResults");
        sessionStatus.setComplete();    
        List<AccountDetail> accList = accountService.getAccountDetail(adp);
        request.setAttribute("accountList", accList); // here we go
    }

}

もう 1 つの重要な点は、portlet.xmlに以下の config タグを追加することです。これにより、リクエスト属性を取得して render メソッドに再度入れなくても、JSPでリクエスト属性を使用できるようになります。

<container-runtime-option>
    <name>javax.portlet.actionScopedRequestAttributes</name>
    <value>true</value>
</container-runtime-option>
<container-runtime-option>
    <name>javax.portlet.renderHeaders</name>
    <value>true</value>
</container-runtime-option>
<container-runtime-option>
    <name>javax.portlet.escapeXml</name>
    <value>false</value>
</container-runtime-option>

問題が発生した場合はお知らせください。

于 2013-06-05T13:35:21.383 に答える
0

JSR286アクションスコープのリクエスト属性の使用を試みることができます。http://www.theserverside.com/news/1363818/JSR-286-Portlets-Action-scoped-Request-Attributesを参照してください。

また、タイプミスの可能性がありますが、doActionに注釈を付けます@ActionMapping(params = ACTION_MYACTION)

于 2012-11-16T12:44:50.677 に答える
-2

答えを見つけました!

使用する必要があります

PortletUtils.setSessionAttribute(actionrequest, "mylist", mylist);

actionresponse.setRenderParameterの代わりに。

できます!

于 2012-11-19T13:19:58.017 に答える