2010-06-24 17 views
7

Ho una crescente applicazione Web che ora deve essere in grado di memorizzare le preferenze e le impostazioni dell'utente e del sistema. In passato ho sempre implementato il mio sistema di preferenze per le applicazioni web, ma mi chiedevo cosa fanno gli altri per risolvere questo problema? Esistono librerie di preferenze per le applicazioni Web che le persone potrebbero consigliare?Preferenze utente nell'applicazione Java EE

Idealmente le preferenze utente devono avere un valore predefinito che l'utente può quindi sovrascrivere. Non tutte le preferenze dovrebbero essere esposte all'utente, come in alcuni casi, ad esempio l'ultima posizione di una finestra di dialogo.

Se si esegue il roll-my-own route, penso che sarà una tabella delle preferenze separata con tutte le preferenze memorizzate come stringhe convertite al loro tipo di dati primitivo, come richiesto. per esempio. una tabella come chiave, user_key, setting_name, setting_value. Preferisco questo approccio a una colonna per tipo di dati perché impedisce a un'impostazione di finire accidentalmente con due valori e il consumatore di un'impostazione dovrebbe sapere quale tipo di dati desidera.

+0

Avete bisogno di essere in grado di cambiare le preferenze in modo dinamico? Altrimenti lo standard JEE è l'uso di "" che può essere cercato o iniettato. – ewernli

+0

Sì, le preferenze devono essere dinamiche. Alcuni saranno set utente, ad esempio il tema preferito, e altri saranno set di sistema per l'utente, ad esempio l'ultima posizione di una finestra di dialogo. – wobblycogs

risposta

3

Un approccio che utilizziamo è:

  • tutte le proprietà non obbligatorie hanno valori di default nel codice
  • forniscono un file di proprietà con l'applicazione web in cui si definiscono le proprietà tecniche orientate
  • di query di SQL tabella all'avvio dell'applicazione per caricare principalmente proprietà orientate al funzionamento

Le proprietà del database hanno una priorità più alta di quelle del p incluso file roperty. Se il tuo requisito è di impedire ai manager funzionali di modificare le proprietà tecniche, puoi aggiungere una colonna di contesto alla tabella delle proprietà che è selezionata nell'interfaccia utente di gestione.

Tutto il codice dell'applicazione che viene visualizzato è una raccolta di proprietà globalmente utilizzata.

-3

C'è un'API JDK per questo: java.util.prefs

http://java.sun.com/j2se/1.4.2/docs/guide/lang/preferences.html

+2

Grazie, ero a conoscenza del sistema di preferenze e l'ho usato in alcune applicazioni desktop. Probabilmente potrebbe essere fatto per fare quello che voglio, ma penso che sia una scelta piuttosto scarsa per un'applicazione web. Vedo che si tratta di due errori maggiori in quanto non c'è spazio per la memorizzazione del database delle impostazioni e nessun concetto di sessioni utente (supporta le impostazioni per utente, ma non nel modo in cui un'applicazione web ha bisogno). – wobblycogs

+0

Anche l'implementazione delle preferenze standard su UNIX utilizza un thread in background per scaricare le modifiche nel backing store e non c'è modo di interrompere questo thread quando si ricarica la webapp che porta a perdite di memoria. –