Pregunta

Tengo una aplicación struts2 con una sola página que puede mostrar uno de varios valores almacenados en una base de datos. La solicitud es para una escuela con muchos departamentos y cada departamento tiene muchos programas. Se accede a la página del departamento utilizando una URL como esta

department.action?id=2

y DepartmentAction cargará el Departamento con id = 2 para su visualización. Todo esto está bien si el usuario simplemente está navegando por el sitio, pero se siente incómodo si quiero proporcionar un enlace que diga el departamento de ingeniería en los periódicos. El enlace deberá ser www.myschooldomain.com/department.action?id=2. Veo una serie de problemas con esto.

Primero, no es fácil de usar. En segundo lugar, es probable que se rompa porque los departamentos se mantienen dinámicamente y la identificación de un departamento puede cambiar sin previo aviso, lo que hace que el enlace sea inestable.

Preferiría imprimir una url como esta: www.myschooldomain.com/department/engineering y tener que ir de alguna manera a department.action? id = 2.

Mis pensamientos hasta ahora: cree una acción que analice la url para el nombre del departamento al final y luego búscala por nombre. Tal vez podría agregar un campo amigable a la base de datos para cada departamento.

Pero la pregunta es: ¿hay una mejor manera de hacerlo en struts2?

Gracias.

Actualización (mayo de 2009): me topé con esta pregunta y pensé que diría lo que hice para resolverla.

Creé un nuevo paquete en los struts.xml llamados departamentos. En este paquete solo hay una acción asignada a *. Entonces, captura todas las solicitudes a mydomain.com/departments/anything.html.

En la clase de acción, simplemente analizo la url y busco la parte entre los departamentos / y .html y ese es el nombre del departamento para que pueda hacer una búsqueda en la base de datos. Esto ha estado funcionando bien durante casi 5 meses y lo he implementado para otras áreas del sitio.

¿Fue útil?

Solución

Esto normalmente se hace asignando un servlet a, en su caso '/ department', y luego usando ruta (por ejemplo, '/ engineering') dentro del servlet para determinar la ID.

Dado que el despachador de Struts2 no implementa este comportamiento, podría ser más sencillo escribir su propio servlet. Este servlet se configuraría con un mapa de válido " amigable " nombres a los identificadores numéricos hostiles. Esto podría ser un Mapa real o podría hacerse con un método de búsqueda de base de datos.

El resultado de getPathInfo () se usaría para buscar el ID, y la solicitud sería reenviado a la acción del departamento. Maneja el caso null también, lo que significa que el usuario está intentando navegar por el directorio / department / .

Otros consejos

Puede usar el filtro de reescritura de URL

Esto evita la necesidad de cualquier servlet adicional o código Java, pero requiere descriptores XML.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top