我认为我需要在Django中称为反向URL解析。可以说我有一个AddUserController,它像这样:
@Controller @RequestMapping("/create-user") public class AddUserController{ ... }
我想要的是一种动态找到此控制器的URL或从视图(JSP)到带有参数的URL的方式,因此我不必将URL硬编码到整个控制器。在Spring MVC中可能吗?
您是否考虑过将需要的所有控制器URL聚合到HashMap中,然后将此控制器/ URL映射添加到需要它的任何模型中的bean?每个Spring控制器都可以调用init()方法,您可以让每个控制器在init()方法中将其名称和URL添加到控制器/ URL映射中,以便在控制器上线时可以使用。
可以用Java Reflection API解决。通过创建自定义标签库。方法看起来像这样
Class c = Class.forName("Your Controller"); for(Method m :c.getMethods()){ if(m.getName()=="Your Method"){ Annotation cc = m.getAnnotation(RequestMapping.class); RequestMapping rm = (RequestMapping)cc; for(String s:rm.value()){ System.out.println(s); } } }
您可能面对的可能问题是
1.Path变量>像/ pet / show / {id}这样,应该支持路径名和值集,然后在返回URL之前替换此String.replace()
/ pet / show / {id}
2.方法重写>只有一种方法没问题。如果方法重写需要提供您真正想要的参数类型的支持序列,例如Method.getParametersType()
Method.getParametersType()
3.Multiple Url to Single Method>,例如@RequestMapping(value = {“ /”,“ welcome”})。如此简单的规则是选择第一个。
Multiple Url to Single Method>
@RequestMapping(value = {“ /”,“ welcome”})
4.Ant Like Style Url>像这样.do解决这是通过在最后一个例如放置ant like style来使用多个URL。@RequestMapping(value={“/pet”,”/pet/.do”})
Ant Like Style Url
所以可能的链接标签样式是
<my:link controller="com.sample.web.PetController" method="show" params="java.lang.Integer"> <my:path name="id" value="1" /> </my:link>
如果没有方法覆盖,则parmas属性是可选的。
也许我会去思考一些问题。:)