2010-12-01 14 views
1

Ich möchte eine Aufzeichnung Detailseite implementieren, die der Benutzer wie über eine URL aufrufen können:Der beste Weg für die Aufzeichnung Existenz in Editor Form überprüfen

http://somewhere.foo/detail.jsf?recordId=1 

Nun, wenn der Datensatz mit der identfier angegebenen können gefunden werden, sollte die eigentliche Editor-Seite angezeigt werden, wenn sie nicht gefunden wird, sollte stattdessen eine Fehlerseite angezeigt werden.

Was ist der beste Weg, um dieses Verhalten mit JSF 2.0 und Facelets zu erreichen?

Ich dachte an so etwas wie diese (in Pseudo-Code):

detail.xhtml

<if #{!recordBean.recordFound}> 
    <ui:include detailNotFound.xhtml> 
    <else> 
    ... show regular edit form here ... 
    <endif> 

Sind die besser oder "mehr akzeptiert" Möglichkeiten dies zu tun?

Antwort

1

Verwenden Sie dazu die rendered-Attributierung. Unter der Annahme, dass #{recordBean.list} gibt ein List, hier ein Beispiel:

<h:panelGroup rendered="#{empty recordBean.list}"> 
    <ui:include src="detailNotFound.xhtml" /> 
</h:panelGroup> 
<h:panelGroup rendered="#{not empty recordBean.list}"> 
    ... 
</h:panelGroup> 

Oder, wenn es beide gehören Seiten sind, dann könnten Sie auch einen bedingten Operator ?: gerade in src von ui:include:

<ui:include src="#{empty recordBean.list ? 'detailNotFound.xhtml' : 'showDetails.xhtml'}" /> 

Für Falls Sie interessiert sind, hier sind einige Beispiele für mögliche boolesche Bedingungen im rendered Attribut:

<h:someComponent rendered="#{bean.booleanValue}" /> 
<h:someComponent rendered="#{bean.intValue > 10}" /> 
<h:someComponent rendered="#{bean.objectValue == null}" /> 
<h:someComponent rendered="#{bean.stringValue != 'someValue'}" /> 
<h:someComponent rendered="#{!empty bean.collectionValue}" /> 
<h:someComponent rendered="#{!bean.booleanValue and bean.intValue != 0}" /> 
<h:someComponent rendered="#{bean.enumValue == 'ONE' or bean.enumValue == 'TWO'}" /> 
1

Sie können sowohl die Fehlermeldung als auch den Aufzeichnungseditor auf derselben Seite haben. Verwenden Sie das gerenderte Attribut für beide und die Render-Fehlermeldung, wenn kein Datensatz- und Show-Editor vorhanden ist, wenn ein Datensatz vorhanden ist.