2017-12-06 32 views
0

(免責事項:私はポートレット開発の初心者です)Javaポートレット:どのように(サーバー側)をserveResourceにリダイレクトするのですか?

ファイルを提供するために(liferayで)ポートレットを作成しました。しかし、ユーザーは最初に小さなフォーム(名前など)を記入し、「保存」をクリックした後にデータをデータベースに保存し、ダウンロード用のファイルを提供する必要があります。

@Override 
public void serveResource(ResourceRequest resourceRequest, ResourceResponse resourceResponse) 

とアクションを使用してデータを保存します:

私はファイルを提供する方法を知っている

@ProcessAction(name = "save") 
public void save(ActionRequest actionRequest, ActionResponse actionResponse) 

しかし、一方から他方へServer.Transferをするのか分かりません。

serveResource(actionRequest, actionResponse); 

パラメータは互換性がないため、私は電話できません。私がすべきエラーでも

resourceRequest/resourceResponseには使用できません
PortalUtil.copyRequestParameters(actionRequest, actionResponse); 
actionResponse.setRenderParameter("mvcPath", "/myForm.jsp"); 

...

ポートレットにおけるリダイレクトのこの種のための適切な/エレガントな方法は何ですか?

答えて

0

processActionを使用する代わりにフォームを保存する場合は、直接serveResourceを呼び出してフォームとサーブファイルをserveメソッド自体から保存できます。

また、Ajaxからフォームの送信依頼を受けることもできます。

<form action="<portlet:resourceURL/>" method="POST"> 
... 
</form> 
@Override 
public void serveResource(ResourceRequest resourceRequest, ResourceResponse resourceResponse){ 

//Save_form 

    if(success){ 
     //serveFile 
     String documentPath = document.getDocumentPath(); 

     File file = getFile(documentPath); 

     String contentType = MimeTypesUtil.getContentType(file); 

     long contentLength = file.length(); 

     is = new FileInputStream(file); 

     ServletResponseUtil.sendFile(
      request, response, document.getDocumentName(), is, contentLength, contentType, 
      HttpHeaders.CONTENT_DISPOSITION_INLINE); 

    }else{ 

     response.getOutputStream("Error submitting form"); 
     response.getOutputStream().flush(); 
    } 

} 
+0

それは動作しますが、私が必要としているようではありません:ダウンロードページはまだフォームの後にあります。データが保存され、ファイルを提供できるという情報を元に戻すようにリダイレクトしてください... ありがとう、 – Robert

+0

あなたは2回の書類提出をしなければなりません。成功すればotherをfileにする。 – Rajesh

0

そのためには、ajaxを使用してresourceUrlを使用してフォームを送信する必要があります。 以下のコードをserveResourceメソッドに書き込んでファイルをダウンロードします。

+0

たぶん私はそれを正しく言葉で表現していない - 私は、クライアントへの旅行せずに、processActionメソッドからファイルを提供したいです。私はおそらく、必要な場合には、ajaxを使ってフォームからアクションデータを送信することができます... – Robert