JSF + Spring -> Converter spinnt rum

Phash

Top Contributor
Servus,

in meiner Webanwendung habe ich ein Problem.

Aufbau:
Hibernate 3.6.7 unter Spring 3.1.3 unter JSF2.1.3

Ich habe eine faces-config, in der ich einen Converter konfiguriere
[XML] <converter>
<description>Konverter für Rechtsstellungen</description>
<converter-id>rechtsstellungsConverter</converter-id>
<converter-class>de.backend.converter.RechtsstellungsConverter</converter-class>
</converter>[/XML]

und ich habe einen Converter, der eine Spring-Bean ist. Er ist in einem Bereich, der von scan-package für Annotationbasierte Config gefunden wird:

Java:
package de.backend.converter;

import de.model.entities.Rechtsstellung;
import de.model.persistence.db.daos.RechtsstellungsDao;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.apachecommons.CommonsLog;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Getter
@Setter
@CommonsLog
@Service("rechtsstellungsConverter")
public class RechtsstellungsConverter implements Converter {

    @Autowired
    private RechtsstellungsDao rechtsstellungsDao;


    @Transactional
    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        return rechtsstellungsDao.findByBezeichnung(value);
    }


    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        Rechtsstellung rs = (Rechtsstellung) value;
        return rs.getBezeichnung();
    }
}

das ganze wird dann in einem SelectOneMenu benutzt:

[XML]
<tr>
<td><h😱utputLabel value="Rechtsstellung:" for="rechtsstellung" /></td>
<td><h:selectOneMenu id="rechtsstellung" value="#{anlegeController.stiftung.rechtsstellung}"
title="Rechtsstellung" required="true"
requiredMessage="The Rechtsstellung field is required."
converter="rechtsstellungsConverter">
<f:selectItems value="#{anlegeController.rechtsstellungsListe}" var ="_rechtsstellung" itemLabel="#{_rechtsstellung.bezeichnung}"
itemValue="#{_rechtsstellung}" />
</h:selectOneMenu></td>
<td> <h😱utputLabel value="Kurzbeschreibung:" for="kurzbeschreibung" /></td>
<td><h:inputText id="kurzbeschreibung" value="#{anlegeController.stiftung.kurzbeschreibung}" title="Kurzbeschreibung" /></td>

</tr>
[/XML]

Probleme:
  1. der Converter bekommt die DAO nicht injiziert (die injizierung funktioniert aber in einem Service - der Service wird auch nicht in den Converter injiziert, hab ich auch schon versucht)
  2. die Mehode public Object getAsObject(FacesContext context, UIComponent component, String value) bekommt als "String value" einen völlig falschen String übergeben (einen, aus einem anderen Feld)

soo... fällt einem was dazu ein?
 
und gleich die Lösung dazu *g*

meine Herren..(und Damen)
es war eigenlich ganz einfach:


Wir benutzen JSF nur als Anzeigeframework... wir sollten es eigentlich mal durch SpringWebMVC ersetzen, dann wäre das wahrscheinlich alles viel einfacher..

nunja, das Fehlerchen war folgendes:

wir benutzen keine Faces-Managed-Beans. Sondern lediglich Spring-Beans.
Dieser Aufruf hier:
[XML]converter="rechtsstellungsConverter"[/XML]
matched auf eine Regel in der faces-config. Dadurch wird der Converter (JSFbasiert) geladen, und die DAO wird nicht injiziert.

ändert man den Aufrug auf:
[XML]converter="#{rechtsstellungsConverter}"[/XML]
und lässt sich hier eine Spring-Service-Bean injizieren, wird auch die DAO injiziert.
Frage 2 lässt sich damit zwar nicht beantworten, allerdings trat der Fehler nun auch nicht mehr auf ... evtl war es ein Rendering-Fehler, der damit zusammenhing... kA werd ich weiter untersuchen
 

Zurück
Oben