dev@javaserverfaces.java.net

Re: Flash scope still broken? (Mojarra 2.3m04)

From: arjan tijms <arjan.tijms_at_gmail.com>
Date: Wed, 2 Mar 2016 22:18:33 +0100

Hi,

On Wed, Mar 2, 2016 at 9:49 PM, Lenny Primak <lprimak_at_hope.nyc.ny.us> wrote:

> So then what is the right way to access flash from a component?
> All other documentation and results of internet searches point to
> solutions from pages, not components.
> Specifically, I need to access the flash from the layout component
>

Not 100% sure about the Flash, but as for doing things pre-render time you
may want to look at the Cache component I did for OmniFaces. There I
subscribe from the ctor to several events. See here:
https://github.com/omnifaces/omnifaces/blob/2.2/src/main/java/org/omnifaces/component/output/Cache.java#L159

Kind regards,
Arjan Tijms










>
> On Mar 2, 2016, at 2:33 PM, manfred riem <manfred.riem_at_oracle.com> wrote:
>
> Hi Lenny,
>
> PreRenderComponent is triggered during RENDER_RESPONSE phase just before
> a specific component is rendered. If you are using the Flash then it
> indeed is
> at the wrong time.
>
> Thanks!
>
> Kind regards,
> Manfred Riem
>
> On 2/29/16, 12:49 PM, Lenny Primak wrote:
>
> I would think that preRenderComponent also satisfies INVOKE_APPLICATION
> requirement.
> I’ve been doing a lot of reading about this few years ago and I think I
> got that one correctly.
>
> <?xml version='1.0' encoding='UTF-8' ?>
> <!DOCTYPE html [ <!ENTITY nbsp "&#160;"> ]>
> <html xmlns="http://www.w3.org/1999/xhtml"
> xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
> xmlns:h="http://xmlns.jcp.org/jsf/html"
> xmlns:jsf="http://xmlns.jcp.org/jsf"
> xmlns:f="http://xmlns.jcp.org/jsf/core"
> xmlns:p="http://xmlns.jcp.org/jsf/passthrough"
> xmlns:baw="http://xmlns.jcp.org/jsf/composite/components"
> xmlns:flowlogix="http://flowlogix.com/ui"
> xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
> xmlns:pf="http://primefaces.org/ui"
> xmlns:o="http://omnifaces.org/ui">
> <head jsf:id="head">
> <f:view transient="#{empty transient? 'true' : transient}"/>
> <f:event type="preRenderComponent"
> listener="#{layout.setPageType(pageType)}”/>
> ………………
>
> @Model @Getter
> public class Layout
> {
> public enum PageType { Index, Pallets, Logistics }
>
>
> public void setPageType(PageType pageType)
> {
> -----------------
> if (Faces.hasSession() && !Faces.getSession(false).isNew() &&
> Boolean.TRUE.equals(Faces.getFlashAttribute(AttributeKeys.SESSION_EXPIRED_KEY)))
> {
> // below doesn’t get executed
>
> Faces.getContext().addMessage(AttributeKeys.SESSION_EXPIRED_KEY,
> new FacesMessage(FacesMessage.SEVERITY_INFO,
> null, "Your Session has Expired"));
> }
> ...
>
> On Feb 29, 2016, at 12:42 PM, arjan tijms <arjan.tijms_at_gmail.com> wrote:
>
> Hi,
>
> On Monday, February 29, 2016, Lenny Primak <lprimak_at_hope.nyc.ny.us> wrote:
>
>> The funny thing is that I am not using flash at all.
>> The only Flash-related call in the process here is a getFlashAttribute
>> within
>> preRenderComponent event.
>
>
> That probably counts for "using The Flash" I'm afraid.
>
> It's conceptually a bit weird though that by just reading and never
> writing the code still wants to write out the flash cookie.
>
> Kind regards,
> Arjan
>
>
>
>
>
>
>> I don’t see how this could affect things at all.
>> This only happens for (unconfirmed) very large pages.
>>
>> > On Feb 29, 2016, at 11:08 AM, manfred riem <manfred.riem_at_oracle.com>
>> wrote:
>> >
>> > Hi Lenny,
>> >
>> > You are using the Flash too late in the process, aka during render.
>> >
>> > If you do not want this problem to show up please use the Flash during
>> INVOKE_APPLICATION.
>> >
>> > Thanks!
>> >
>> > Kind regards,
>> > Manfred Riem
>> >
>> > On 2/26/16, 11:41 PM, Lenny Primak wrote:
>> >> I am using Mojarra 2.3m04, and Flash scope is still broken.
>> >> I am getting this error:
>> >>
>> >> -----
>> >> JSF1095: The response was already committed by the time we tried to
>> set the outgoing cookie for the flash. Any values stored to the flash will
>> not be available on the next request.
>> >> ——
>> >>
>> >> The weird thing is that I am not even putting anything into flash
>> scope, and there is no flash cookie in the browser.
>> >>
>> >> I put this snippet in web.xml:
>> >> <context-param>
>> >> <param-name>javax.faces.FACELETS_BUFFER_SIZE</param-name>
>> >> <param-value>32768</param-value>
>> >> </context-param>
>> >>
>> >> which solves this problem 99% of the time, but for some large pages,
>> the issue persists.
>> >>
>> >> I have no way to reproduce this as this happens very, very rarely, and
>> only in production
>> >> (yes, I am using 2.3m04 in production and it works great!)
>> >
>>
>>
>
>