Ich bin neu in JSF und habe Probleme damit, Daten an meine Backing-Bean zu übergeben. Ich habe eine Bohne, die Daten zu einer spezifischen Tabelle lesen und speichern sollte. Diese Tabelle hat zwei Spalten "Eigenschaft" und "Val". Die vereinfachte Version dieser Klasse sieht folgendermaßen aus:Bestehe das Initialisierungsargument von der JSF-Ansicht zur verwalteten Bean im Hintergrund
@ManagedBean
@SessionScoped
public class GlobalProperties implements Serializable {
// private void setKey(param);
// private String getKey();
// some more attributes and getters/setters
private String property; // + getter/setter
private void saveProperty() throws SQLException {
try {
dbHandler = dbConnection.connect();
ps = dbHandler.prepareStatement("UPDATE TABLEXXX SET VAL = '" + getValue() + "' WHERE PROPERTYKEY = '" + getProperty() + "'");
ps.executeQuery();
} catch (SQLException ex) {
Logger.getLogger(GlobalProperties.class.getName()).log(Level.SEVERE, null, ex);
} finally {
if (dbHandler != null) {
dbHandler.close();
}
}
}
private void readProperty() throws SQLException {
try {
dbHandler = dbConnection.connect();
ps = dbHandler.prepareStatement("SELECT VAL FROM TABLEXXX WHERE PROPERTYKEY = '" + getProperty() + "'");
rs = ps.executeQuery();
while (rs.next()) {
setValue("VAL");
}
} catch (SQLException ex) {
Logger.getLogger(GlobalProperties.class.getName()).log(Level.SEVERE, null, ex);
} finally {
if (dbHandler != null) {
dbHandler.close();
}
}
}
}
Diese Klasse wird auf mehreren Seiten verwendet. Auf jeder Seite, die es benutzt, muss es mit einem anderen Wert für das property-Attribut gefüllt werden, da ich verschiedene Schlüssel aus der Tabelle lesen muss. Auf der JSF-Seite gibt es eine Texteingabe, die den Wert anzeigt und ihn einstellt, wenn der Benutzer auf eine Schaltfläche zum Speichern klickt.
Immer wenn eine Instanz dieser Klasse erstellt wird, muss ich der Klasse Informationen darüber geben, welchen Schlüssel sie lesen muss. Aber ich kann keinen geeigneten Mechanismus auf JSF-Seite finden, um dies zu erreichen, da es sehr wichtig ist, dass der Benutzer diesen Wert nicht ändern kann.
Mein letzter Versuch war die "preRenderView" -Event wie folgt zu verwenden:
<f:metadata>
<f:event type="preRenderView" listener="#{globalProperties.setKey('SYSTEM_NAME')}" />
</f:metadata>
Ist das der richtige Weg?
Was ist die beste Vorgehensweise, um eine Eigenschaft in einer ManagedBean im Hintergrund ohne Benutzeraktion und auf sichere Weise festzulegen, damit sie vom Benutzer nicht manipuliert werden kann?
Danke Jungs.
Große Antwort. Geholfen! Vielen Dank. – Caz
Gern geschehen. – BalusC