همانطور که میدانید و قبلا نیز توضیح داده شد، هنگامی که برنامه Redirect میشود، تمامی آبجکت ها از بین رفته و نمیتوان به مقادیر آنها در سایر صفحات دسترسی پیدا نمود. به عنوان مثال فرض کنید کلاسی در حافظه RequestScoped طراحی کرده که دارای متدی بنام SaveCustomer می باشد. در این متد هنگامی که عملیات ثبت انجام میگردد، برنامه میبایست کاربر را به صفحه ای دیگر منتقل کرده و در آن صفحه پیغامی متناسب با شرایط به کاربر نمایش دهد. با توجه به توضیحات سایر بخشها این کار اصلا امکان پذیر نبوده زیرا که با Redirect شدن صفحه تمام مقادیر و همچنین پیغامهای تعریف شده از بین خواهد رفت. برای رفع این مشکل در JSF 2.0 آبجکتی بنام Flash طراحی شده که می تواند یک پیغام را در خود را نگهداری کرده و در یک صفحه جدید(فقط صفحه ای که برنامه به آن Redirect شده است) دیگر به کاربر نمایش دهد.

نکته: برای انجام این کار میتوان از آبجکت Session نیز استفاده نمود. اما اینکار موجب ایجاد یک سربار بر روی سرور خواهد شد.

نکته: علاوه بر پیغام، با استفاده از آبجکت Flash می توان یک کلاس را نیز به صفحه جدید ارسال نمود.

برای آشنایی بیشتر با این آبجکت به مثال زیر توجه نمائید.

@ManagedBean(name = "bean")
public class Bean {
   private String text;
   // getter and setter
 
   public String nextpage (){
       return "page2";
   }
}

نکته: در کلاس فوق چون هیچ Scope ای تعریف نگردیده است، Scoped پیش فرض یعنی RequestScoped@ برای کلاس در نظر گرفته میشود.

<h:form>
   <h:panelGrid>
    <h:outputText value="Text:" />
    <h:inputText value="#{bean.text}" />
    <h:commandButton action="#{bean.nextpage}" value="Click" />
   </h:panelGrid>
</h:form>

صفحه فوق، صفحه اختصاص داده شده به کلاس Bean میباشد. در این صفحه میخواهیم هنگامی که کاربر مقداری را در فیلد Text وارد میکند و بر روی دکمه Click کلیک میکند، مقدار وارد شده در صفحه page2.xhtml به کاربر نمایش داده شود. دستورات صفحه page2.xhtml به صورت زیر میباشد:

<h:form>
    <h:inputText value="#{bean.text}" />
</h:form>

صفحه فوق، یک صفحه خالی را به کاربر نمایش میدهد.

برای این کار باید متد nextPage را به صورت زیر باز نویسی نمائیم:

public String nextpage (){
   JSFUtils.flashScope().put("bean", this);   
   return "page2";
}

public class JSFUtils {
   public static Flash flashScope (){
    return (FacesContext.getCurrentInstance().getExternalContext().getFlash());
   }
}

در دستورات فوق تمام کلاس Bean را با تمام مقادیر ذخیره شده در آن در یک آبجکت Flash ذخیره نموده ایم (کلاس JSFUtils کلاسی برای ایجاد آبجکت Flash با استفاده از متد ()getFlash میباشد).

حال برای دسترسی به کلاس Bean در صفحه جدید باید از لغت رزور شده flash در صفحه page2.xhtml بصورت زیر استفاده نمود:

<h4>#{flash.bean.text}</h4>

و یا

<h4>#{flash['bean'].text}</h4>

نکته بسیار مهم: برای استفاده از این آبجکت باید حتما برنامه بطور کامل به صفحه ای دیگر Redirect گردد.(بصورت پیش فرض در JSF صفحه Forward میگردد، و این یعنی اینکه آدرس URL صفحه بدون تغییر باقی مانده در صورتی که صفحه ای جدید به کاربر نمایش داده میشود) که برای اینکار باید حتما دستور faces-redirect = true در دستورات کلاس Bean گنجانده شود.

public String nextpage (){
   JSFUtils.flashScope().put("bean", this);   
   return "page2?faces-redirect=true";
}

نکته: بهتر است از آبجکت Flash فقط برای ذخیره پیغام استفاده نمائید.

اگر میخواهید از مقدار ذخیره شده در آبجکت Flash، در بیشتر از یک درخواست و یا یک صفحه دسترسی داشته باشید، باید از لغت keep بصورت زیر استفاده نمائید:

#{flash.keep.message}

دستور فوق مقدار ذخیره شده در آبجکتی بنام message را در آبجکت flash ذخیره نموده و می توان از آن در چندین صفحه و یا کلاس استفاده نمود.

اگر میخواهید کد فوق را در کلاس Bean پیاده سازی نمائید، میتوانید از دستور زیر استفاده نمائید:

FacesContext.getCurrentInstance().getExternalContext().getFlash().setKeepMessages(true);

آبجکت Flash ایجاد شده توسط دستور فوق در چندین صفحه می تواند مورد استفاده قرار گیرد.