dev@javaserverfaces.java.net

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

From: manfred riem <manfred.riem_at_oracle.com>
Date: Thu, 03 Mar 2016 10:59:56 -0600

Hi,

It is OK to access it from a component you just need to be aware that IF
you have a large
page and IF you haven't accessed it until the RENDER_RESPONSE phase you
have the potential
of this problem showing up.

If your business logic knows the Flash is going to be used then invoking
it programmatically
in INVOKE_APPLICATION circumvents this problem.

But if you are NOT in control of that then there is not a whole lot you
can do.

Thanks!

Kind regards,
Manfred Riem

On 3/2/16, 2:49 PM, Lenny Primak wrote:
> Well, that’s surprising…thanks!
> 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
>
>> On Mar 2, 2016, at 2:33 PM, manfred riem <manfred.riem_at_oracle.com
>> <mailto: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
>>>> <mailto:arjan.tijms_at_gmail.com>> wrote:
>>>>
>>>> Hi,
>>>>
>>>> On Monday, February 29, 2016, Lenny Primak <lprimak_at_hope.nyc.ny.us
>>>> <mailto: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 <javascript:;>> 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!)
>>>> >
>>>>
>>>
>