2010-11-15 17 views
6

Dikiş 2.2'yi, sunum sunusu katmanı olarak kullanıyorum. Tüm istisnaları yakalamak için bir çeşit altyapı yazabilirim.Dikiş merkezi istisnaları

@Observer("myapp.exceptions.exception") 
public void onSystemException(Exception e) 
{ 
    System.out.println("a exception was occurred"); 

} 

i bir yöntem yazmak

public void aMethod() 
{ 
    throw new NullPointerException(); 
} 

denetleyicisi: MySeamController sınıfında

<p:commandButton actionListener="#{mySeamController.aMethod()}" 

, yukarıdaki yöntemle: Örneğin kod parçasının izlenerek facelets koymak İstisnaları yakalamak için bir sınıf yazarım:

@Scope(ScopeType.APPLICATION) 
@BypassInterceptors 
@Install(precedence = Install.MOCK, classDependencies = "javax.faces.context.FacesContext") 
@Name("org.jboss.seam.exception.exceptions") 
public class ExceptionHandler extends org.jboss.seam.exception.Exceptions{ 


private static final long serialVersionUID = 1L; 
@Logger 
    Log log; 

public void handle(Exception e) throws Exception 
{    
    Events.instance().raiseEvent("myapp.exceptions.exception", e); 
    super.handle(e); 

} 
} 

ama ActionListener

<p:commandButton actionListener="#{mySeamController.aMethod()}" 

yerine bir eylem

<p:commandButton action="#{mySeamController.aMethod()}" 

istisna ExceptionHandler sınıfı tarafından gözlenmiştir kullandığınızda i taht fark ettik. Neden? Biri yardım edebilir mi? Saygılarımızla

+0

Bunu hiç çözdünüz mü? Bu bir çözüm değil, ancak bazı sorunlardan kurtulmak için, Exceptions sınıfı kaynak koduna bakın. İstisnalar için olayları kaldırır, bu yüzden bir ara işleyici oluşturmanız gerekmez: Events.instance(). RaiseEvent ("org.jboss.seam.exceptionNotHandled", e); Events.instance(). RaiseEvent ("org.jboss.seam.exceptionHandled", neden); Kullanıcı oturumu istisnalarını izlemek için kullanıyorum (en azından Seam istisnaları). – gebuh

cevap

0

Bir engelleyici oluşturun ve ihtiyacınız olan her şeyi yakalayabilirsiniz.