Hallo,
ich möchte eine <h:datatable> dynamisch nach dem Erstellen neuer Elemente refreshen.
Dafür habe ich 3 Ansätze, und wüsste gerne welcher zu Bevorzugen ist:
1. mit @Observes
2. oder aber lasse die observer weg, und rufe die findAll() direkt aus der create methode aus auf:
3. mit ajax
Das Problem hier ist: Ansatz 3 gefällt mir am besten, da kein zusätzliche Code in der Javaklasse notwendig ist. Nur funktioniert der Ajax-Ansatz so nicht! Denn da ich die findAll() methode hierbei weder über observer noch explizit aufrufe, wird customerList immer erst beim post-construct erneuert. Das führt dazu: ich füge Customer1 hinzu - nicht passiert. Ich füge Cust2 hinzu - die table wird aktualisiert und zeigt Cust1. usw.
Wie bekomme ich den Ansatz mit Ajax wie gewollt zum laufen?
Danke
ich möchte eine <h:datatable> dynamisch nach dem Erstellen neuer Elemente refreshen.
Dafür habe ich 3 Ansätze, und wüsste gerne welcher zu Bevorzugen ist:
1. mit @Observes
Java:
public class Facade {
private List<Customer> customerList;
public void createNew() {
service.create(newCustomer);
event.fire(newCustomer);
}
public void onCustomerChanged(@Observes(notifyObserver = Reception.IF_EXISTS) final Customer newCustomer) {
findAll();
}
@PostConstruct
public void findAll() {
customerList = service.findByNamedQuery("Customer.ALL");
}
public List<Customer> getCustomerList() {
return customerList;
}
}
2. oder aber lasse die observer weg, und rufe die findAll() direkt aus der create methode aus auf:
Java:
public void createNew() {
service.create(newCustomer);
findAll();
}
3. mit ajax
Java:
public void createNew() {
service.create(newCustomer);
}
<h:form>
<h:commandButton id="register" action="#{facade.createNew()}" value="Register">
<f:ajax execute="@form" render = ":customerTable" />
</h:commandBUtton>
</h:form>
<h:datatable id="customerTable" var="_customer" value="facade.customerList">...
Das Problem hier ist: Ansatz 3 gefällt mir am besten, da kein zusätzliche Code in der Javaklasse notwendig ist. Nur funktioniert der Ajax-Ansatz so nicht! Denn da ich die findAll() methode hierbei weder über observer noch explizit aufrufe, wird customerList immer erst beim post-construct erneuert. Das führt dazu: ich füge Customer1 hinzu - nicht passiert. Ich füge Cust2 hinzu - die table wird aktualisiert und zeigt Cust1. usw.
Wie bekomme ich den Ansatz mit Ajax wie gewollt zum laufen?
Danke