Hallo,
ich hab mal wieder ein Problem.. (ich verwendet Primefaces 3.5, jsf 2.1.26)
Ich habe eine Tabelle, die ist mit einem rowEditor ausgestattet. dieser funktioniert auch. Allerdings wollte ich noch einen Delete Button hinzufügen, aber der geht nicht so richtig.
Hier erstmal der Code:
die delete Methode im Service:
Ich habe mir das Subject beim Aufruf der delete() ausgeben lassen. Beim ersten Mal wenn ich auf den Button drücke kommt null.
Beim 2. mal funktioniert das löschen. Wenn ich dann noch ein andres Subject löschen will, dann hat er immernoch die Referenz vom gelöschten Subject drin. Vermutlich, weil er eben beim ersten Klick auf den Button das Objekt nicht holt.
Aber warum...??
Danke für eure hilfe...
ich hab mal wieder ein Problem.. (ich verwendet Primefaces 3.5, jsf 2.1.26)
Ich habe eine Tabelle, die ist mit einem rowEditor ausgestattet. dieser funktioniert auch. Allerdings wollte ich noch einen Delete Button hinzufügen, aber der geht nicht so richtig.
Hier erstmal der Code:
HTML:
<p:dataTable id="sublist" value="#{subjectService.subjects}" var="Subject"
rowKey="#{Subject}" editable="true"
paginator="true" rows="10">
<f:facet name="header">Liste der Faecher</f:facet>
<p:ajax event="rowEdit" update=":form:sublist" listener="#{subjectService.onEdit}"/>
<p:ajax event="rowEditCancel" listener="#{subjectService.onCancel}" update=":form:sublist" />
<p:column headerText="Faecher">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{Subject.subjectName}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{Subject.subjectName}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Studiengang">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{Subject.studyCourse}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{Subject.studyCourse}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Edit">
<p:rowEditor />
<p:commandButton process="@this" var="Subject" id="subjectDeleteButton" value="Delete"
actionListener="#{subjectService.delete()}" update=":form:sublist">
<f:setPropertyActionListener value="#{Subject}" target="#{subjectService.sub}" />
</p:commandButton>
</p:column>
</p:dataTable>
die delete Methode im Service:
Java:
@Transactional(readOnly = false)
public void delete() {
System.out.println("Subject: " + sub);
if(sub.getId() == 0){ //damit es beim ersten drücken keine fehlermeldung gibt.
return;
} else {
//wenn ich nur delete(sub); mache, dann kommt n Fehler, dass ich ein detached Obj. loeschen will.
getSubjectDAO().deleteById(sub.getId());
subjects.remove(sub);
sub = null;
}
}
Ich habe mir das Subject beim Aufruf der delete() ausgeben lassen. Beim ersten Mal wenn ich auf den Button drücke kommt null.
Beim 2. mal funktioniert das löschen. Wenn ich dann noch ein andres Subject löschen will, dann hat er immernoch die Referenz vom gelöschten Subject drin. Vermutlich, weil er eben beim ersten Klick auf den Button das Objekt nicht holt.
Aber warum...??
Danke für eure hilfe...