dev@javaserverfaces.java.net

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

From: Lenny Primak <lprimak_at_hope.nyc.ny.us>
Date: Thu, 3 Mar 2016 11:05:45 -0600

Thanks, Manfred,
I think increasing javax.faces.FACELETS_BUFFER_SIZE to a number larger than the largest page solves the problem.

> On Mar 3, 2016, at 10:59 AM, manfred riem <manfred.riem_at_oracle.com> wrote:
>
> 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 <http://www.w3.org/1999/xhtml>"
>>>> xmlns:ui="http://xmlns.jcp.org/jsf/facelets <http://xmlns.jcp.org/jsf/facelets>"
>>>> xmlns:h="http://xmlns.jcp.org/jsf/html <http://xmlns.jcp.org/jsf/html>"
>>>> xmlns:jsf="http://xmlns.jcp.org/jsf <http://xmlns.jcp.org/jsf>"
>>>> xmlns:f="http://xmlns.jcp.org/jsf/core <http://xmlns.jcp.org/jsf/core>"
>>>> xmlns:p="http://xmlns.jcp.org/jsf/passthrough <http://xmlns.jcp.org/jsf/passthrough>"
>>>> xmlns:baw="http://xmlns.jcp.org/jsf/composite/components <http://xmlns.jcp.org/jsf/composite/components>"
>>>> xmlns:flowlogix="http://flowlogix.com/ui <http://flowlogix.com/ui>"
>>>> xmlns:c="http://xmlns.jcp.org/jsp/jstl/core <http://xmlns.jcp.org/jsp/jstl/core>"
>>>> xmlns:pf="http://primefaces.org/ui <http://primefaces.org/ui>"
>>>> xmlns:o="http://omnifaces.org/ui <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!)
>>>>> >
>>>>>
>>>>
>>