Hallo, in our web-application (JSF2.2 with DaltaSpike) we listen in a PhaseListener during RESTORE_VIEW on a special url. According to the HTTP-Post data we initialize a ViewAccessScoped bean and then redirect to a target url using ExternalContext.redirect(targeturl).
This redirect results in two requests to the target url. Both requests have different instances of the ViewAccessScoped bean. For this reason the initialization data gets lost. How can a redirect be done without having two following requests? Before migrating from JSF1.2 to JSF2.2 and without using DeltaSpike there was only one request after redirecting. Threrefore we suppose that this effect results from deltaspike and the dswid parameter. For this reason we tried to extend the target url like: targeturl + „?dswid=“ + viewaccesscopedbean.getDswid() reading the dswid from deltaspike – WindowContext With this extension of the targeturl the behaviour is no more predictable. The redirect sometimes results in two sometimes it results in one request. Here our java-code: public class MyTestPhaseListener implements PhaseListener { /** * ViewAccessScoped Bean */ @Inject MyVAccBean myVAccBean; @Override public void afterPhase(PhaseEvent event) { } @Override public void beforePhase(PhaseEvent event) { if (event.getPhaseId() == PhaseId.RESTORE_VIEW) { ExternalContext extCtx = event.getFacesContext().getExternalContext(); HttpServletRequest request = (HttpServletRequest) extCtx.getRequest(); String currReqUri = request.getRequestURI(); if (currReqUri.indexOf("/initialPage.jsf") > 0) { myVAccBean.setValue("some value"); redirectToTargetUrl(event, "targetPage.jsf"); } } } private void redirectToTargetUrl(PhaseEvent event, String tagretUrl) { try { String encodedUrl = tagretUrl + "?dswid=" + myVAccBean.geDsWindowId(); event.getFacesContext().getExternalContext().redirect(encodedUrl); } catch (Throwable e) { e.printStackTrace(); } } @Override public PhaseId getPhaseId() { return PhaseId.ANY_PHASE; } } Tel: E-Mail: devn...@safir-wid.de Internet: https://www.safir-wid.de safir Wirtschaftsinformationsdienst GmbH Sitz der Gesellschaft: Möllendorffstr.49, 10367 Berlin Geschäftsführer: Thilo Kind Registergericht: Amtsgericht Berlin Charlottenburg, HRB 66681 USt-ID: DE 193584747 -- This email was Malware checked by UTM 9. http://www.sophos.com