در JSF 1.2, تمام ارتباطات بین صفحات میبایست در فایل faces-config.xml بصورت زیر تعریف میگردید :

<navigation-rule>
   <from-view-id>page1.xhtml</from-view-id>
   <navigation-case>
       <from-outcome>page2</from-outcome>
       <to-view-id>/page2.xhtml</to-view-id>
   </navigation-case>
</navigation-rule>

دستورات فوق را میتوان بدین صورت تفسیر نمود که, اگر در صفحه page1.xhtml خروجی متدی برابر با page2 باشد، برنامه کاربر را به صفحه page2.xhtml ارجاع خواهد داد.

در JSF 2.0، نیازی به استفاده از فایل faces-config.xml نبوده و میتوان نام صفحه را مستقیماً در خاصیت outcome از کنترل link یا button وارد نمود. اصطلاحاً به این نوع روش ارجاع Implicit Navigation گفته میشود.

در JSF 2.0، دو روش برای پیاده سازی Implicit Navigation وجود دارد:

روش اول: تعریف outcome در خاصیت action

در این روش همانطور که در بالا توضیح داده شد می توان نام صفحه را که اصطلاحا به آن outcome گفته میشود،همانند دستورات زیر در خاصیت action وارد نمود:


<h:form>
    <h:commandButton action="page2" value="Move to page2.xhtml" />
</h:form>

روش دوم: تعریف outcome در Managed Bean

یک outcome می توان خروجی یک متد از کلاس Managed Bean باشد. با این کار هنگامی که متد در برنامه اجرا میگردد، برنامه کاربر را مستقیماً به صفحه مورد نظر ارجاع میدهد.

@ManagedBean
@SessionScoped
public class PageController implements Serializable {
 
    public String moveToPage2(){
        return "page2"; //outcome
    }
}

<h:form>
    <h:commandButton action="#{pageController.moveToPage2}"
    value="Move to page2.xhtml by managed bean" />
</h:form>

نکته: در Implicit Navigation مقدار outcome خروجی حتماً میبایست برابر با نام صفحه ای باشد که میخواهید به آن

ارجاع داده شوید.

تنظیم Redirection

بصورت پیش فرض در JSF 2.0، هنگام ارجاع به صفحه دیگر آدرس URL برنامه بدون تغییر باقی میماند. به عنوان مثال هنگامی که از صفحه page1.xhtml به صفحه page2.xhtml میروید، آدرس URL در صفحه Page2 همچنان page1.xhtml میباشد. برای جلوگیری از این کار میتوان از خاصیت faces-redirect = true همانند دستور زیر استفاده نمائید:

<h:form>
    <h:commandButton action="page2?faces-redirect=true" value="Move to page2.xhtml" />
</h:form>

منبع: http://www.mkyong.com

به نظر من بهتر است فقط در صورت نیاز از خاصیت faces-redirect = true استفاده نمائید. زیرا با فعال نمودن این خاصیت مدت زمان لود صفحه مقداری بیشتر خواهد شد.