В моей программе я хочу добавить музыкальных учеников к событиям музыкальной школы.
Существует .xhtml для отображения всех событий в таблице данных.Вне таблицы данных вы можете нажать кнопку для обновления или удаления события.Обе кнопки перенаправляют вас на update.xhtml или delete.xhtml.Событие передается следующему компоненту события с помощью f: setPropertyActionListener, который работает нормально.
update.xhtml также обновляет событие с помощью af: setPropertyActionListener, что также отлично работает.
Теперь я хочу добавить номер студента музыки к моему событию (есть ArrayList для сбора всехмузыкальные студенты в случае) с дополнительной страницы.
Выходя из набора данных нажатием кнопки addStudent-Button, вы попадаете на страницу добавления.Там вы можете увидеть детали события, как на странице обновления, так что f: setPropertyActionListener работает нормально.Когда я вписываю номер студента в поле ввода и нажимаю кнопку добавления, я получаю исключение нулевого указателя, потому что бин больше не знает событие.Что я делаю не так?
Это рабочий update.xhtml:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<h:outputStylesheet library="css" name="main.css" />
</h:head>
<h:body>
<h:form id="eventUpdateForm">
<h:messages />
<h3>Update an Event durchfuehren</h3>
<h:outputLabel value="Event-Nr.: " />
<h:inputText value="#{eventMB.selectedEventTo.eventNr}"
readonly="true" />
<h:inputHidden value="#{eventMB.selectedEventTo.eventNr}" />
<br></br>
<h:outputLabel value="Bezeichnung " />
<h:inputText value="#{eventMB.selectedEventTo.bezeichnung}"></h:inputText>
<br></br>
<h:outputLabel value="Ort" />
<h:inputText value="#{eventMB.selectedEventTo.ort}"></h:inputText>
<br></br>
<h:outputLabel value="Anzahl Saxophone" />
<h:inputText value="#{eventMB.selectedEventTo.anzahlSaxophone}"></h:inputText>
<br></br>
<h:outputLabel value="Anzahl Trompeten" />
<h:inputText value="#{eventMB.selectedEventTo.anzahlTrompeten}"></h:inputText>
<br></br>
<h:outputLabel value="Anzahl Posaunen" />
<h:inputText value="#{eventMB.selectedEventTo.anzahlPosaunen}"></h:inputText>
<br></br>
<h:outputLabel value="Anzahl Schlagzeuge" />
<h:inputText value="#{eventMB.selectedEventTo.anzahlSchlagzeuge}"></h:inputText>
<br></br>
<h:outputLabel value="Anzahl Pianos" />
<h:inputText value="#{eventMB.selectedEventTo.anzahlPianos}"></h:inputText>
<br></br>
<h:outputLabel value="Anzahl Bass" />
<h:inputText value="#{eventMB.selectedEventTo.anzahlBass}"></h:inputText>
<br></br>
<h:outputLabel value="Anzahl Gitarren" />
<h:inputText value="#{eventMB.selectedEventTo.anzahlGitarren}"></h:inputText>
<br></br>
<h:outputLabel value="Zeitpunkt (mm.DD.yyyy HH:mm)" />
<h:inputText value="#{eventMB.selectedEventTo.eventZeitpunkt}"></h:inputText>
<br></br>
<br></br>
<h:commandButton value="Speichern"
action="#{eventMB.updateEventEnd()}" style=" width: 200px">
<f:setPropertyActionListener value="#{eventMB.selectedEventTo}"
target="#{eventMB.selectedEventTo}" />
</h:commandButton>
</h:form>
<h:form>
<h:commandButton value="Abbruch"
action="#{eventMB.updateEventAbbrechen()}"
style=" width: 200px" />
</h:form>
<br />
</h:body>
</html>
А это нерабочий add.xhtml:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<h:outputStylesheet library="css" name="main.css" />
</h:head>
<h:body>
<h:form id="eventZuordnungForm">
<h:messages />
<h3>Schueler zum Event hinzufuegen</h3>
<h:outputLabel value="Event-Nr.: " />
<h:inputText value="#{eventMB.selectedEventTo.eventNr}"
readonly="true" />
<h:inputHidden value="#{eventMB.selectedEventTo.eventNr}" />
<br></br>
<h:outputLabel value="Bezeichnung " />
<h:inputText value="#{eventMB.selectedEventTo.bezeichnung}" readonly="true"></h:inputText>
<br></br>
<h:outputLabel value="Ort" />
<h:inputText value="#{eventMB.selectedEventTo.ort}" readonly="true"></h:inputText>
<br></br>
<h:outputLabel value="Anzahl Saxophone" />
<h:inputText value="#{eventMB.selectedEventTo.anzahlSaxophone}" readonly="true"></h:inputText>
<br></br>
<h:outputLabel value="Anzahl Trompeten" />
<h:inputText value="#{eventMB.selectedEventTo.anzahlTrompeten}" readonly="true"></h:inputText>
<br></br>
<h:outputLabel value="Anzahl Posaunen" />
<h:inputText value="#{eventMB.selectedEventTo.anzahlPosaunen}" readonly="true"></h:inputText>
<br></br>
<h:outputLabel value="Anzahl Schlagzeuge" />
<h:inputText value="#{eventMB.selectedEventTo.anzahlSchlagzeuge}" readonly="true"></h:inputText>
<br></br>
<h:outputLabel value="Anzahl Pianos" />
<h:inputText value="#{eventMB.selectedEventTo.anzahlPianos}" readonly="true"></h:inputText>
<br></br>
<h:outputLabel value="Anzahl Bass" />
<h:inputText value="#{eventMB.selectedEventTo.anzahlBass}" readonly="true"></h:inputText>
<br></br>
<h:outputLabel value="Anzahl Gitarren" />
<h:inputText value="#{eventMB.selectedEventTo.anzahlGitarren}" readonly="true"></h:inputText>
<br></br>
<h:outputLabel value="Zeitpunkt (mm.DD.yyyy HH:mm)" />
<h:inputText value="#{eventMB.selectedEventTo.eventZeitpunkt}" readonly="true"></h:inputText>
<br></br>
<br></br>
<h:outputLabel value="Schueler-Nr des zuzuordnenden oder zu entfernenden Schuelers angeben" />
<br></br>
<h:inputText value="#{eventMB.schuelerNrZuordnung}" />
//add assigment
<h:commandButton value="Schueler zuordnen"
action="#{eventMB.schuelerZuordnungEnd()}" style=" width: 200px">
<f:setPropertyActionListener value="#{eventMB.selectedEventTo}"
target="#{eventMB.selectedEventTo}" />
</h:commandButton>
//delete assignment
<h:commandButton value="Schueler vom Event entfernen"
action="#{eventMB.schuelerZuordnungEntfernenEnd()}" style=" width: 210px">
<f:setPropertyActionListener value="#{eventMB.selectedEventTo}"
target="#{eventMB.selectedEventTo}" />
</h:commandButton>
</h:form>
<h:form>
<h:commandButton value="Abbruch"
action="#{eventMB.schuelerZuordnungAbbrechenClicked()}"
style=" width: 200px" />
</h:form>
<br />
</h:body>
</html>
MyEvent-Bean выглядит так:
package eventplaner;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.enterprise.context.RequestScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import entity.EventTO;
import usecase.IEventPflegen;
import usecase.IEventSuchen;
import java.io.Serializable;
@Named("eventMB")
@RequestScoped
public class EventMB implements Serializable {
/**
*
*/
private static final long serialVersionUID = -4993586944162555024L;
@Inject
IEventPflegen eventPflegenFacade;
@Inject
IEventSuchen eventSuchenFacade;
private String selectedEventNr;
private EventTO selectedEventTO;
private String sucheNr;
private int schuelerNrZuordnung;
public EventMB() {
}
@PostConstruct
public void initBean() {
this.selectedEventTO = null;
this.selectedEventNr = "";
this.selectedEventTO = new EventTO();
this.schuelerNrZuordnung = 0;
}
public String updateEventStart() {
System.out.println("Starte Update Event: " + this.selectedEventTO.getEventNr());
return "UPDATE_EVENT";
}
........
public String updateEventEnd() {
System.out.println("Event speichern: " +this.selectedEventTO.getEventNr());
eventPflegenFacade.eventAendern(this.selectedEventTO);
return "BACK_TO_EVENTLISTANZEIGE";
}
public String updateEventAbbrechen() {
return "BACK_TO_EVENTLISTANZEIGE";
}
public String deleteEventStart() {
EventTO EventTO = eventSuchenFacade.eventSuchenMitNummer(this.selectedEventTO.getEventNr());
System.out.println("Starte das Loeschen von Event: " + EventTO.getEventNr());
return "DELETE_EVENT";
}
public String deleteEventEnd() {
FacesContext fc = FacesContext.getCurrentInstance();
Map<String, String> params = fc.getExternalContext().getRequestParameterMap();
this.selectedEventNr = params.get("selectedEventNr");
System.out.println("Loesche Event: " + this.selectedEventNr);
try {
eventPflegenFacade.eventLoeschen(Integer.valueOf(this.selectedEventNr));
} catch (Exception e) {
e.printStackTrace();
}
return "BACK_TO_EVENTLISTANZEIGE";
}
public String deleteEventAbbrechenClicked() {
System.out.println("Loeschen des Events " + this.getSelectedEventNr() + " abgebrochen!");
this.initBean();
return "BACK_TO_EVENTLISTANZEIGE";
}
public String starteSchuelerZuordnung() {
System.out.println("Starte Zuordnung zu Event: " + this.selectedEventTO.getEventNr());
return "EVENT_SCHUELER_ZUORDNEN";
}
public void schuelerZuordnungEnd() {
this.selectedEventTO.addSchueler(this.schuelerNrZuordnung);
}
public void schuelerZuordnungEntfernenEnd() {
this.selectedEventTO.removeSchueler(this.schuelerNrZuordnung);
}
public String schuelerZuordnungAbbrechenClicked() {
return "BACK_TO_EVENTVW";
}
public EventTO getEventTo() {
return selectedEventTO;
}
public void setEventTo(EventTO EventTo) {
if (this.selectedEventTO == null) {
this.selectedEventTO = new EventTO();
}
this.selectedEventTO = EventTo;
}
public EventTO getSelectedEventTo() {
return selectedEventTO;
}
public void setSelectedEventTo(EventTO selectedEventTo) {
this.selectedEventTO = selectedEventTo;
}
public EventTO getSelectedEventTO() {
return selectedEventTO;
}
public void setSelectedEventTO(EventTO selectedEventTO) {
this.selectedEventTO = selectedEventTO;
}
public int getSchuelerNrZuordnung() {
return schuelerNrZuordnung;
}
public void setSchuelerNrZuordnung(int schuelerNrZuordnung) {
this.schuelerNrZuordnung = schuelerNrZuordnung;
}
.......
}