У меня есть приложение struts2 с одной страницей, которая может показывать одно из нескольких значений, хранящихся в базе данных. Приложение предназначено для школы со многими отделами, и у каждого отдела есть много программ. Доступ к странице отдела осуществляется с помощью URL-адреса, подобного этому
department.action?id=2
и DepartmentAction загрузит Department с id = 2 для отображения. Все это хорошо, если пользователь просто просматривает сайт, но становится неудобно, если я хочу предоставить ссылку на инженерный отдел в газетах. Ссылка должна быть www.myschooldomain.com/department.action?id=2. Я вижу ряд проблем с этим.
Во-первых, это не удобно для пользователя. Во-вторых, он может быть поврежден, потому что отделы поддерживаются динамически, и идентификатор отдела может изменяться без предупреждения, делая связь нестабильной.
Я бы предпочел напечатать URL-адрес примерно так: www.myschooldomain.com/department/engineering, и пусть он каким-то образом перейдет в отдел.action? Id = 2.
Мои мысли на данный момент: создать действие, которое будет анализировать URL-адрес для названия отдела в конце, а затем искать его по имени. Может быть, я мог бы добавить поле friendlyurl в базу данных для каждого отдела.
Но вопрос в следующем: есть ли лучший способ сделать это в Struts2?
Спасибо.
Обновление (май 2009 г.): Я случайно наткнулся на этот вопрос и подумал, что скажу, что я сделал, чтобы решить его.
Я создал новый пакет в struts.xml под названием департаменты. В этом пакете есть только одно действие, сопоставленное с *. Таким образом, он ловит все запросы на mydomain.com/departments/anything.html.
В классе действий я просто анализирую URL и ищу часть между отделами / и .html, и это название отдела, поэтому я могу выполнить поиск в базе данных для него. Это работает нормально уже почти 5 месяцев, и я внедрил его для других областей сайта.