@ Biergamasda
das wäre dein perfomancetechnischer Tod...
bei 100 Datensätzen ok, aber wenn wir hier von zehntausenden reden,
dann ist es absoluter Schwachsinn.
du könntest zum Beispiel bei bestehenden Datensätzen einen "Ändern" Button einbauen in dem du
dir merkst, dass der User etwas verändert hat.
Ohne deinen Quellcode näher zu kennen, den du mir sehr wahrscheinlich nicht zeigen kannst,
fällt mir spontan auch nichts anderes ein im Moment
EDIT:
Der zündende Einfall ist mir grad gekommen...

du könntest deine InputTextFelder einfach tatsächlich mit einem onclick oder onkeyup event versehen, das diese Variable auf true setzt und
voila, du weißt ob etwas verändert wurde.
Dein Link hat die Lösung doch eigentlich auch schon parat, denn wenn du mal genauer nachliest,
wurde lediglich ursprünglich eine Lösung unter ADF entwickelt, die diese Entwickler auf JSF anwendbar gemacht haben...
Verstehe nicht, wie du daran vorbeilesen konntest
Code:
....
<application>
....
<!-- Fully qualified class name -->
<navigation-handler>CommitNavigationHandler</navigation-handler>
....
</application>
....
Java:
public class CommitNavigationHandler
extends NavigationHandler
{
private NavigationHandler handler = null;
public static final String COMMIT_ENABLED =
"#{bindings.Commit.enabled}";
public CommitNavigationHandler(NavigationHandler handler)
{
super();
this.handler = handler;
}
@Override
public void handleNavigation(FacesContext facesContext,
String fromAction, String outcome)
{
Boolean outstandingChangesWrapper =
resolveExpressionAsBoolean(CommitNavigationHandler.COMMIT_ENABLED, facesContext);
if (outcome != null && outstandingChangesWrapper != null &&
outstandingChangesWrapper.booleanValue())
{
// The outcome is not null (so we are navigating away from the current page)
// and the page has some unsaved changes so display the same page with a
// message to tell user to either save the changes or reset the form.
FacesMessage message =
new FacesMessage("You have uncommitted changes! Please either save or reset.");
facesContext.addMessage(null, message);
this.handler.handleNavigation(facesContext, fromAction, null);
}
else
{
// No changes or it's a postback, do navigation as intended
this.handler.handleNavigation(facesContext, fromAction, outcome);
}
}
private Boolean resolveExpressionAsBoolean(String el, FacesContext fc)
{
ValueBinding valueBinding =
fc.getApplication().createValueBinding(el);
return (Boolean) valueBinding.getValue(fc);
}
}
HTML:
<af:commandButton actionListener="#{bindings.Rollback.execute}"
text="Rollback" disabled="#{!bindings.Rollback.enabled}"
immediate="true">
<af:resetActionListener/>
</af:commandButton>