Pergunta

Eu tenho um aplicativo struts2 com uma única página que pode mostrar um de uma série de valores armazenados em um banco de dados. A aplicação é para uma escola com muitos departamentos e cada departamento tem muitos programas. A página departamento é acessado usando uma URL como este

department.action?id=2

eo DepartmentAction irá carregar o Departamento com id = 2 para exibição. Tudo isso é bom se o usuário está apenas navegar ao redor do local, mas fica desconfortável se eu quiser fornecer um link para dizer o departamento de engenharia nos jornais. A ligação terá que ser www.myschooldomain.com/department.action?id=2. Eu vejo uma série de problemas com isso.

Em primeiro lugar, não é fácil de usar. Em segundo lugar, ele está propenso a ser quebrado, porque os departamentos são mantidos de forma dinâmica e o id para um departamento poderia mudar sem aviso fazer a ligação instável.

Eu preferiria para imprimir uma url como este:?. Www.myschooldomain.com/department/engineering e têm que de alguma forma ir para department.action id = 2

Os meus pensamentos até agora: criar uma ação que irá analisar o url para o nome do departamento, no final, então procurá-lo pelo nome. Talvez eu poderia adicionar um campo friendlyurl ao banco de dados para cada departamento.

Mas a questão é: Existe uma maneira melhor de fazer isso em struts2

?

Graças.

Atualizar (maio de 2009): Aconteceu de eu voltar tropeço sobre esta questão e pensei que eu iria dizer o que eu fiz para resolvê-lo.

Eu criei um novo pacote nas struts.xml chamados departamentos. Neste pacote há apenas uma ação mapeada para *. Então ele pega todas as solicitações para mydomain.com/departments/anything.html.

Na classe ação que simplesmente analisar o url e olhar para a parte entre os departamentos / e .html e que é o nome do departamento para que eu possa fazer uma pesquisa no banco de dados para ele. Isso tem sido muito bem trabalhando por quase 5 meses e agora eu implementaram-lo para outras áreas do site.

Foi útil?

Solução

Isso normalmente é feito através do mapeamento um servlet para, no seu caso '/ departamento', e em seguida, usando o informações de caminho (por exemplo, '/ engenharia') dentro do servlet para determinar o ID.

Uma vez que o despachante Struts2 não implementar este comportamento, pode ser mais simples para escrever seu próprio servlet. Este servlet seria configurado com um mapa de nomes válidos "amigáveis" para os identificadores numéricos hostis. Esta poderia ser uma Map real ou isso poderia ser feito com um método finder banco de dados.

O resultado da getPathInfo() seria usado para procurar o ID eo pedido seria encaminhado ao department.action. Lidar com o caso null também, o que significa que o usuário está tentando procurar o diretório /departments/.

Outras dicas

Você pode usar o filtro URL Rewrite

Isso evita a necessidade de qualquer servlet adicional ou código Java, mas requer descritores XML.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top