这是堆栈跟踪的第一行:
java.lang.NullPointerException
at de.jsfpraxis.managedbean.UeberweisungsHandler.auswahl(UeberweisungsHandler.java:81)....
整个代码都在这里。
@ManagedBean
公共课UeberweisungsHandler {
private static Logger logger = Logger.getLogger(UeberweisungsHandler.class.getCanonicalName());
@ManagedProperty(value = "#{kundenHandler}")
private KundenHandler kundenHandler;
private String empfaenger;
private String verwendungszweck;
private BigDecimal betrag;
private String konto; // Syntax: <Nummer> (<Art>)
private String kontoEmpfaenger; // nicht verwendet
@PersistenceContext
private EntityManager em;
@Resource
private UserTransaction utx;
public UeberweisungsHandler() {
logger.log(Level.INFO, UeberweisungsHandler.class.getName() + "-Instanz erzeugt");
}
public String ueberweisen() {
logger.info("Konto: " + konto);
String kontonummer = konto.substring(0, konto.indexOf(' '));
try {
utx.begin();
Konto konto = em.find(Konto.class, new Integer(kontonummer));
@SuppressWarnings("unused")
Buchung buchung = new Buchung(betrag, Buchungsart.SOLL, empfaenger, verwendungszweck, konto);
utx.commit();
return "weitere-ueberweisung.xhtml?faces-redirect=true";
} catch (Exception e) {
logger.log(Level.SEVERE, "Fehler beim Einfügen einer Buchung");
return null;
}
}
/**
* Das zu selektierende Konto wird bestimmt
*/
public void auswahl(ComponentSystemEvent cse) {
logger.info("auswahl() aufgerufen");
ELContext context = FacesContext.getCurrentInstance().getELContext();
Application application = FacesContext.getCurrentInstance().getApplication();
ExpressionFactory exFactory = application.getExpressionFactory();
ValueExpression ve = exFactory.createValueExpression(context, "#{param['kontonummer']}", Integer.class);
String kontonummer = ve.getValue(context).toString();
List<String> konten = kundenHandler.getKonten();
for (String kto : konten) {
if (kto.startsWith(kontonummer)) {
konto = kto; // Drop-Down setzen
}
}
}
// private Kunde getKunde(){ // ELContext context = FacesContext.getCurrentInstance()。getELContext(); // Application application = FacesContext.getCurrentInstance()。getApplication(); // ExpressionFactory exFactory = application.getExpressionFactory(); // ValueExpression ve = exFactory.createValueExpression(context,“#{kundenHandler.kunde}”,Kunde.class); // return(Kunde)ve.getValue(context); //}
public KundenHandler getKundenHandler() {
return kundenHandler;
}
public void setKundenHandler(KundenHandler kundenHandler) {
this.kundenHandler = kundenHandler;
}
public String getEmpfaenger() {
return empfaenger;
}
public void setEmpfaenger(String empfaenger) {
this.empfaenger = empfaenger;
}
public String getVerwendungszweck() {
return verwendungszweck;
}
public void setVerwendungszweck(String verwendungszweck) {
this.verwendungszweck = verwendungszweck;
}
public BigDecimal getBetrag() {
return betrag;
}
public void setBetrag(BigDecimal betrag) {
this.betrag = betrag;
}
public String getKonto() {
return konto;
}
public void setKonto(String konto) {
this.konto = konto;
}
public String getKontoEmpfaenger() {
return kontoEmpfaenger;
}
public void setKontoEmpfaenger(String kontoEmpfaenger) {
this.kontoEmpfaenger = kontoEmpfaenger;
}
public String getKontoinhaber() {
Kunde kunde = kundenHandler.getKunde();
return kunde.getVorname() + " " + kunde.getNachname();
}
}
但是这行引发了NullPointerException:
第81行:字符串kontonummer = ve.getValue(context).toString();