Domanda

Ho un'applicazione struts2 con una singola pagina che può mostrare uno dei numerosi valori memorizzati in un database. L'applicazione è per una scuola con molti dipartimenti e ogni dipartimento ha molti programmi. È possibile accedere alla pagina del dipartimento utilizzando un URL come questo

department.action?id=2

e DepartmentAction caricheranno il dipartimento con id = 2 per la visualizzazione. Tutto questo va bene se l'utente sta solo navigando nel sito, ma diventa scomodo se voglio fornire un link per dire il dipartimento di ingegneria sui giornali. Il link dovrà essere www.myschooldomain.com/department.action?id=2. Vedo una serie di problemi con questo.

Innanzitutto, non è facile da usare. In secondo luogo, è probabile che venga interrotto perché i reparti vengono gestiti in modo dinamico e l'id per un reparto potrebbe cambiare senza preavviso rendendo instabile il collegamento.

Preferirei stampare un URL come questo: www.myschooldomain.com/department/engineering e in qualche modo andare su department.action? id = 2.

I miei pensieri finora: creare un'azione che analizzerà l'URL per il nome del reparto alla fine, quindi lo cercherà per nome. Forse potrei aggiungere un campo friendlyurl al database per ogni dipartimento.

Ma la domanda è: c'è un modo migliore per farlo in struts2?

Grazie.

Aggiornamento (maggio 2009): Mi è capitato di imbattermi in questa domanda e ho pensato che avrei detto cosa avrei fatto per risolverlo.

Ho creato un nuovo pacchetto in struts.xml chiamato dipartimenti. In questo pacchetto è presente solo un'azione associata a *. Quindi raccoglie tutte le richieste su mydomain.com/departments/anything.html.

Nella classe di azione analizzo semplicemente l'URL e cerco la parte tra dipartimenti / e .html e questo è il nome del dipartimento in modo da poterlo cercare nel database. Funziona bene da quasi 5 mesi e l'ho implementato per altre aree del sito.

È stato utile?

Soluzione

Questo viene normalmente eseguito mappando un servlet, nel tuo caso '/ dipartimento', e quindi usando percorso informazioni (ad esempio, '/ engineering') all'interno del servlet per determinare l'ID.

Poiché il dispatcher Struts2 non implementa questo comportamento, potrebbe essere più semplice scrivere il proprio servlet. Questo servlet verrebbe configurato con una mappa valida " amichevole " nomi agli identificatori numerici ostili. Questa potrebbe essere una vera Mappa o potrebbe essere eseguita con un metodo di ricerca del database.

Il risultato di getPathInfo () verrebbe utilizzato per cercare l'ID e la richiesta sarebbe inoltrato al dipartimento.azione. Gestisci anche il caso null , il che significa che l'utente sta cercando di sfogliare la directory / departments / .

Altri suggerimenti

Puoi utilizzare il filtro di riscrittura URL

Questo evita la necessità di servlet aggiuntivi o codice Java ma richiede descrittori XML.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top