Refresh entities
hispeedsurfer Jan 12, 2007 8:08 AMHow can I refresh entities in the following case.
I have a page that contains:
<div class="entry">
<a4j:log hotkey="M" />
<a4j:commandButton value="Reload" reRender="Sensor"/>
<div class="label">Sensor:</div>
<div class="input">
<a4j:region renderRegionOnly="false">
<h:selectOneMenu id="Sensor" value="#{messkette.sensor}"
converter="#{selectItemHelfer}" required="true" disabled="#{gesperrt}">
<f:selectItems value="#{messketteEditor.alleSensorenMitBlank}" />
<a4j:support event="onchange" reRender="Funktion, Sensormessbereich, Einheit, Sensorwarnung" />
</h:selectOneMenu>
</a4j:region>
<h:message for="Sensor" styleClass="message" />
<div><h:outputText id="Sensorwarnung" value="#{messketteEditor.sensorWarnung}" styleClass="kursiv" /></div>
</div>
</divSometimes I need to edit or create a entry from database in a second instance of web browser. So the list in messketteEditor has changed. But when I perform the Reload commandButton the outcome is the same with no changes.
What I have to do tell the Entitymanger to refresh the list from database.
Here the function that will be executet when a entity is changed or created
public String speichern() {
checkKorrekterAufruf();
if (!vorSpeichern()) {
ejbCtx.setRollbackOnly();
return null;
}
try {
String message = "";
T entity = getEntity();
if (neu) {
//Neues Entity, anlegen
em.persist(entity);
message = angelegtMessage();
loggeAenderung(getEntity(), "angelegt");
} else {
//Bestehendes Entity, Änderungen übernehmen
setEntity(em.merge(entity));
message = bearbeitetMessage();
loggeAenderung(getEntity(), "bearbeitet");
}
nachSpeichern();System.out.println(entity);
em.flush();
addMessage(message);
} catch (Exception ex) {
ejbCtx.setRollbackOnly();
addWarning(speichernError() + " " + exceptionListe(ex));
System.out.println(ex.getMessage());
ex.printStackTrace();
return null;
}
return zurueckOutcome;
}and this is the code to return the list
private List<StandardEntity> listeHolen(Class<? extends StandardEntity> klasse, String where, String order) {
String klassenName = klasse.getName();
String query = "from " + klassenName;
if (where != null)
query += " where " + where;
if (order != null)
query += " order by " + order;
List<StandardEntity> liste;
try {
liste = (List<StandardEntity>) em.createQuery(query).getResultList();
} catch (Exception ex) {
//Im Fehlerfall (z.B. nichts gefunden) leere Liste erzeugen
ex.printStackTrace();
liste = new Vector<StandardEntity>();
}
return liste;
}Is there a solution for this case?
Thanks
andi