1

这是我的控制器代码

@RequestMapping(value = "example.htm", method = RequestMethod.GET)
public ModelAndView showMasterForm(ModelMap model)
{
    ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");        
    MasterJDBCTemplate dao = (MasterJDBCTemplate)context.getBean("masterJDBCTemplate");
    List<String> stateList = dao.getStateList();
    model.addAttribute("stateList", stateList);
    return new ModelAndView("admin/master/example","command" ,new BranchChannelMaster());
}

这会将我带到一个像 www.example.com/example. 我能去做什么www.example.com/example#ui-tabs-4

我遇到这种情况是因为我正在使用 jQuery-ui http://jqueryui.com/tabs/#ajax,现在我想以表格格式显示结果。

4

1 回答 1

3

HTML 中的“#”字符通常表示页面锚点。它允许您在某处设置锚点,然后通过页面上的链接跳转到它。例如:

<html>
  <body>
    <a href="#news">Go to News</a>
    <!-- ...some other HTML -->
    <a name="news" />

  <body>
</html>

在该示例中,我创建了一个链接,该链接将跳转到页面的“新闻”部分。然后,我可以在最后传递带有#news 的URL,并且浏览器应该足够聪明,可以跳转到页面的那个部分。

在我看来,您正在尝试做的事情与我期望浏览器的工作方式不符。我认为浏览器会吞下 # 之后的所有内容,期望在页面中的某个地方看到它,以便跳转到它。我可能是错的,不幸的是我无法编写任何测试代码来证明一种方法。我会很简单地去做,我想。

使用您的示例,我希望您应该将其更改@RequestMapping为:

@RequestMapping(value = "example.htm#ui-tabs-4", method = RequestMethod.GET)

从理论上讲,这会改变您的方法以接受您建议的 URL 模式。如果您想将“#”之后的内容设为变量,您可以执行以下操作:

@RequestMapping(value = "example.htm#{tabName}", method = RequestMethod.GET)
public ModelAndView showMasterForm(@PathVariable String tabName, ModelMap model) {

这将创建一个路径变量,其中包含您在 # 之后传入的任何值,浏览器将其传递给服务器。

另外,请记住 @RequestMapping 可以接受正则表达式,因此如果您想让它接受“example.html#anything”,您可以执行以下操作:

@RequestMapping(value = "example.htm#{tabName:[a-zA-Z]+}", method = RequestMethod.GET)
public ModelAndView showMasterForm(@PathVariable String tabName, ModelMap model) {

这将导致它仅匹配一个或多个字符 az 或 AZ。

我仍然认为它不会起作用,因为我认为“#”之后的任何内容都不会被浏览器发送。

更新

看起来 OP 想要返回一个带有 #anchor 的链接,以便 UI 能够正确跳转到正确的位置。

我认为最好的方法是返回 a RedirectView

@RequestMapping(value = "example.htm", method = RequestMethod.GET)
public ModelAndView showMasterForm(ModelMap model)
{
    ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");        
    MasterJDBCTemplate dao = (MasterJDBCTemplate)context.getBean("masterJDBCTemplate");
    List<String> stateList = dao.getStateList();
    model.addAttribute("stateList", stateList);
    return new ModelAndView(new RedirectView("admin/master/example#ui-tabs-4", true));
}

另一种方法是返回一个字符串而不是 ModelAndView,并返回字符串“redirect:admin/master/example#ui-tabs-4”。

参考:

于 2013-10-28T11:28:58.047 回答