【发布时间】:2013-05-15 05:27:52
【问题描述】:
我已经继承了一个 Spring Web 应用程序,现在我正在扩展它。我经历了海量、蔓延的 Spring XML 文件和重构过程的地狱——我再也回不来了。我现在开始使用注解编写新的控制器代码。
我有控制器,其中 RequestMappings 定义为注释,我将我的 URL 作为最终静态放入控制器中,因此我可以在代码的其他地方引用它们作为返回值。但是,在尝试构建 JSP 时,这一切似乎都碰壁了。
是否有公认的“最佳”方式来做到这一点? (或任何方式?)
为了说明......
public class MyController {
/**
* Magic string that defines the base URL for this action
*/
public static final String BASE_URL = "/do_my_smart_action.do";
/**
* Magic string defining parameter name
*/
public static final String PARAM_ID = "id";
...
@RequestMapping(value = BASE_URL, method = RequestMethod.GET)
public ModelAndView beginSmartAction(
@RequestParam(required = false, value = PARAM_ID) Long id,
ModelMap model) {
// Do clever stuff
return new ModelAndView(TARGET_JSP_NAME, model);
}
}
我希望在我的 jsp 中能够编写类似...的 URL
<a href="<${BASE_URL}?${PARAM_ID}=${object.id}">Do Smart Action</a>
如果我在代码中更改 BASE_URL 的定义,我希望 JSP 中的链接“正常工作”。
郑重声明,我目前使用的是 Spring 3.0.6、Java 1.5 和 glassfish 3.1.2。前者可以相对容易地碰撞。如果我尝试迁移到 java 1.7,代码似乎会发生一些奇怪的事情,因此转换可能会成为一个更大的问题。
我们将不胜感激地接受任何建议。
【问题讨论】:
-
部分回答我自己的问题...进一步调查表明javaranch.com/journal/200601/Journal200601.jsp#a3 是一个值得一看的地方
-
1) 为你的控制器使用
@Controller注解,不需要XML配置。 2)您没有将BASE_URL设置为ModelMap model中的键/值对,您希望如何在您的视图中访问它(与其他EL 参数类似)?您可以创建一个始终将常量添加到模型中的方法。如何设计它取决于您。 -
1) 我知道。我继承了这一点,并且正在重构以使用注释(除其他外)。 2)谢谢你。与以往一样,关键在于问题和我设法遗漏的部分。问题是从其他人驱动的 jsps 链接到 this 控制器。因此,如果我有一个包含一组 Bar 对象的 Foo 对象(以及关联的控制器和 jsps),并且我想从 Foo JSP 链接到 Bar JSP。根据您所说,我意识到解决方案是将 target 控制器中的 URLS 添加到 source 控制器的
ModelMap中 -
你能不能查看不简单的引用自己的URL?
标签: spring jsp dry spring-annotations