Die JSF Spring Integration enthält zusätzlichen Integration, um JSF Ext zusammen mit Spring verwenden zu können.

Custom Scope Injection#

Beim Laden von Scopes werden typischer Weise Parameter übergeben:
<h:commandButton image="#{resource['images/bitcons:edit.gif']}" title="#{messages['edit']}">
	<f:ajax/>
	<e:load scopeId=":user-input">
		<f:param name="user" value="#{user}"/>
	</e:load>
</h:commandButton>

Der Wert wird zunächst in den geladenen Scope geschrieben. Die Parameter können generell mit der Spring-Annotation @Value injiziert über eine EL-Expression injiziert werden:


Allerdings macht Spring Probleme, wenn die EL-Expression zu null evaluiert oder das Property nicht gefunden werden kann. Des Weiteren stört die unnötige EL-Expression, da der Wert bereits durch den Feld- bzw. Methodennamen klar ist, ähnlich bei @Autowired. Durch die Annotation @ScopeValue kann dies eleganter erreicht werden:

@Component
@Scope(Scopes.CUSTOM_SCOPE)
public class UserEdit {
	@ScopeValue
	private User user;
	
	public User getUser() {
		if (user == null)
			user = new User();
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
}

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.