본인의 의도는 리소스 (Dinamically generated PDF)를 제공하는 ResourceRequest를 처리하는 데 있습니다. 이 파일을 잘못 생성하면 포틀릿에 실패 메시지가있는 전체 포털이 렌더링되어야합니다.포틀릿 : 전체 포털을 표시하기 위해 ResourceRequest를 전달하십시오.
전체 포털을 렌더링하는 요청에 ResourceRequest를 전달할 수 있습니까? 나는 또한 리다이렉트를 고려하고 있지만, 나는 어떤 속성들/매개 변수들을 함께 전달할 수 있기를 원할 것이다.
내가 내 문제를 충분히 설명했으면 좋겠다. 고맙습니다.
관련/중복 : How to make the ResourceResponse to forward the request to error page in liferay portlet
예
이 작동 내가 달성하고자하는 것과 유사한 무언가를 예입니다. 저는 Liferay의 유틸리티 클래스 SessionErrors
을 사용합니다 : serveResource()
은 세션에 객체를 저장하고 렌더 URL로 리다이렉션을합니다. doView()
메서드는 후속 요청 중에 호출되며 세션에 저장된 내용을 읽을 수 있습니다.
import com.liferay.portal.kernel.servlet.SessionErrors;
import javax.portlet.GenericPortlet;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;
import javax.portlet.PortletException;
import javax.portlet.PortletException;
import javax.portlet.PortletRequestDispatcher;
public class ResourceRequestForwardPortlet extends GenericPortlet {
public void serveResource(ResourceRequest request, ResourceResponse response)
throws PortletException, IOException {
SessionErrors.add(resourceRequest, "resourcerequest.error", "ERROR " + errorText);
resourceResponse.setProperty(ResourceResponse.HTTP_STATUS_CODE, "302");
resourceResponse.addProperty("Location", resourceResponse.createRenderURL().toString());
}
public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {
String error = (String)SessionErrors.get(renderRequest, "resourcerequest.error");
SessionErrors.clear(renderRequest);
renderRequest.setAttribute("errorMsg", error);
PortletRequestDispatcher portletRequestDispatcher = getPortletContext().getRequestDispatcher("view.jsp");
include(viewTemplate, renderRequest, renderResponse);
portletRequestDispatcher.include(renderRequest, renderResponse);
}
}
달성하고자하는 것은 동일하지만 브라우저가 두 가지 요청을하지 못하도록합니다. 이를 위해 전진을하고 싶습니다. 오류 메시지를 요청 속성으로 써야합니다.
나는 GitHub의이 예제 프로젝트를 업로드 : https://github.com/adrianrm/poc-forward-portlet/tree/master/src/main/java/arm/requestforward
했나 : 전방가 발생했을 때 그 꼭대기에
가,을 Liferay 콘솔에 경고를 표시
: 아직도, 나는 그것이 포틀릿 사양에 존재하지 않는 기능에 대한 해결 방법이라고 생각 솔루션을 찾을 수 있습니까? –아무 것도. 우리는 ActionRequest가 전송되는 해결 방법을 사용했으며, 성공하면 표시된 페이지가 Javascript로 다운로드를 트리거한다고 생각합니다. – AdrianRM
'ResourceRequest'는 대부분 아약스와 함께 사용됩니다. 따라서 전체 포털을 새로 고치려면'ResourceRequest'의 일이 아니며, 최선을 다해 포기할 경우 ajax를 통해 포틀릿에 실패 메시지를 표시 할 수 있습니다. 그렇지 않으면 일부 플래그를 반환하여 자바 스크립트를 통해 전체 포털에서 새로 고침을 트리거 할 수 있습니다. –