This page (revision-5) was last changed on 20-Jun-2014 11:40 by Dieter Käppel

This page was created on 14-May-2013 11:19 by Dieter Käppel

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Page revision history

Version Date Modified Size Author Changes ... Change note
5 20-Jun-2014 11:40 3 KB Dieter Käppel to previous
4 20-Jun-2014 11:40 3 KB Dieter Käppel to previous | to last
3 25-Jan-2014 14:39 3 KB Dieter Käppel to previous | to last
2 25-Jan-2014 14:17 1 KB Dieter Käppel to previous | to last
1 14-May-2013 11:19 1 KB Dieter Käppel to last

Page References

Incoming links Outgoing links

Version management

Difference between version and

At line 1 changed one line
Die [JSF Spring Integration] enthält zusätzlichen Integration, um [JSF Ext] zusammen mit Spring verwenden zu können.
Die [JSF Spring Integration] enthält zusätzlichen Integration, um [JSF Ext] zusammen mit Spring verwenden zu können. [JSF Spring Integration] kann aus dem [Intersult Maven Repository] bezogen werden.
At line 39 added 78 lines
Die Annotation @ScopeValue ist vergleichbar mit @Value("#{scope.user}"). Allerdings ist die Injection effizienter, da keine EL-Expression evaluiert wird und es kommt zu keinen Problemen, falls der Wert nicht vorhanden ist.
!!!Request Parameter Injection
Sicher gibt es auch andere Möglichkeiten Parameter aus dem HTTP Servlet-Request in eine Bean zu bekommen. Die direkteste Methode ist:
{{{
FacesContext context = FacesContext.getCurrentInstance().getExternalContext();
String value = context.getRequestParameterMap().get(<name>);
}}}
Allerdings gibt es gute Gründe, die Injection der [JSF Spring Integration] zu verwenden:
* Auswertung erfolgt zum richtigen Zeitpunkt, während des Requests. Der Wert befindet sich im Property, wenn er benötigt wird. Es ist unter Umständen zu spät, den Parameter aus dem Request zu holen, wenn er benötigt wird, weil dann bereits ein weiterer Request ausgeführt wird.
* Die Null-Fälle werden abgehandelt, es kommt zu keinen Exceptions
* Es wird die Übliche Faces-Konvertierung in Enums, Zahlen etc. durchgeführt
* Der Code ist einfacher und verständlicher, weil er deklarativ ist und keine zusätzlichen Instruktionen enthält
Das Ganze sieht dann so aus:
{{{
@Component
@Scope(WebApplicationContext.SCOPE_REQUEST)
public class ParamController {
@RequestParam
private Long id;
...
}
}}}
!!!Flash Parameter Injection
Eine großartige Neuerung von [JSF 2|JSF2] ist der sogenannte Flash. Es handelt sich um eine Cookie-basierte Map, die Redirects überlebt. Sie kann damit ein Bindeglied zwischen View-Scopes darstellen.
Der Flash ermöglicht das gleichzeitige Verwenden von View-Scopes und die Übergabe von Parametern zwischen unterschiedlichen Views.
Hier ein Beispiel:
{{{
<h:commandButton action="/index.xhtml">
<e:set value="AVAILABLE" target="#{flash.mode}"/>
</h:commandButton>
}}}
Und die zugehörige Bean:
{{{
@Component
@Scope(Scopes.VIEW_SCOPE)
public class Dashboard {
@FlashParam
private TransactionQueryMode mode = TransactionQueryMode.CHRONOLOGICAL;
...
}
}}}
__Erklärung:__ Die Annotation @FlashParam injiziert den Parameter "mode", der zuvor in den Flash geschrieben wurde.
__Hinweis:__ Wie bei RequestParam oder ScopeValue werden auch hier Faces-Converter verwendet, um Datentypen zu konvertieren.
!!!Managed Bean Injection
Mit der Annotation @AutowiredBean können auch managed Beans von JSF injected werden:
{{{
@Component
@Scope(WebApplicationContext.SCOPE_REQUEST)
public class JsfTest implements Serializable {
private static final long serialVersionUID = 1L;
@AutowiredBean
private JsfBean jsfBean;
public String getText() {
return jsfBean.getText();
}
}
}}}