2011-03-24 12 views
20

Lütfen yanılıyorsam düzeltin, ancak AJAX olmayan tüm gönderilerimi düşünerek GET'in verileri yenilemek/sorgulamak için kullanılması gerektiğinden Post/Redirect/Get (PRG) yöntemini kullanması gerektiğini düşünüyorum. Benim durumum, düşünebildiğim uygulama sayfaları gerçekten sadece veriyi güncellemekte ve sayfayı yenilemekte, bu yüzden PRG'nin buraya sığacağını düşünüyorum. JSF 2 ve Gönderi/Yönlendirme/Get?

herhangi bir yolu var mı ..

ben <redirect/> faydalanmak yüzler-config.way kullanarak bunu yapabilirsiniz inanıyoruz, yoksa return "myview.xhtml?faces-redirect=true";

Şimdi soru şu kullanabilirsiniz Ben olmayan AJAX çağrıları için kaynağım bu kadar basittir ki/gönderir, otomatik, gerçek yüzleri-yönlendirme = kullanmakta oldukları global bu yapılandırabilirsiniz:

return "myview"; 
+0

@romaintaz: Teşekkürler yönlendirme etiketini alıntı unuttum Vay – bertie

cevap

24

bir özel ConfigurableNavigationHandler ile bu yapabilirdi. İşte başlama örnek: faces-config.xml aşağıdaki şekilde

package com.example; 

import java.util.Map; 
import java.util.Set; 

import javax.faces.application.ConfigurableNavigationHandler; 
import javax.faces.application.NavigationCase; 
import javax.faces.application.NavigationHandler; 
import javax.faces.context.FacesContext; 

public class RedirectNavigationHandler extends ConfigurableNavigationHandler { 

    private NavigationHandler parent; 

    public RedirectNavigationHandler(NavigationHandler parent) { 
     this.parent = parent; 
    } 

    @Override 
    public void handleNavigation(FacesContext context, String from, String outcome) { 
     if (!outcome.endsWith("?faces-redirect=true")) { 
      outcome += "?faces-redirect=true"; 
     } 

     parent.handleNavigation(context, from, outcome);   
    } 

    @Override 
    public NavigationCase getNavigationCase(FacesContext context, String fromAction, String outcome) { 
     if (parent instanceof ConfigurableNavigationHandler) { 
      return ((ConfigurableNavigationHandler) parent).getNavigationCase(context, fromAction, outcome); 
     } else { 
      return null; 
     } 
    } 

    @Override 
    public Map<String, Set<NavigationCase>> getNavigationCases() { 
     if (parent instanceof ConfigurableNavigationHandler) { 
      return ((ConfigurableNavigationHandler) parent).getNavigationCases(); 
     } else { 
      return null; 
     } 
    } 

} 

bunu Kayıt:

<application> 
    <navigation-handler>com.example.RedirectNavigationHandler</navigation-handler> 
</application> 
+1

haha, zarif! Teşekkür ederim ! – bertie

+0

Rica ederim. – BalusC

+0

Bu eylemci, eylem yöntemi geri döndüğünde işe yaramaz (aynı sayfada kalır) ''? – marioosh