0

我有一个控制器有 2 个这样的动作:

@Controller
@RequestMapping("xyzlogin")
public class XyzloginController 
{
  @RequestMapping(method = RequestMethod.GET)
    public ModelAndView showForm(HttpServletRequest request, ModelMap model) 
    {
         //.... do something....
    }

  @RequestMapping(value = "/requestXYZ", method = RequestMethod.GET)
    public ModelAndView requestXYZ(HttpServletRequest request, ModelMap model) 
    {
         //.... do something with parameter param1.
    }    
}

在视图文件中,我有以下方法来请求此控制器中的操作:

<a href="requestXYZ?param1=abc">Click me to call requestXYZ action</a>

如上例所述,单击超链接后,我想调用 requestXYZ 操作,但我收到 404 错误,说它找不到映射。

我定义映射错误吗?什么是正确的映射?

谢谢,

4

1 回答 1

3

当您的属性中有一个非绝对(即不以 开头/)路径时href,浏览器会将其附加到您当前的上下文中。例如,如果您当前在localhost:8080/yourapp,单击

<a href="requestXYZ?param1=abc">Click me to call requestXYZ action</a>

会把你送到

localhost:8080/yourapp/requestXYZ?param1=abc

在你的情况下,你在

localhost:8080/authenticate/authorize/login?param1=abc

所以点击链接会将您发送到

localhost:8080/authenticate/authorize/requestXYZ?param1=abc

显然(几乎)不存在。

您可以提供/href字符串的前导,以使浏览器从您的主机地址构造一个 URL。

您应该从应用程序上下文根目录构建路径

<a href='<c:url value="/xyzlogin/requestXYZ?param1=abc" />'>Click me to call requestXYZ action</a>

标签库c在哪里。core以上将创建

localhost:8080/yourcontextroot/xyzlogin/requestXYZ?param1=abc

Spring 对此也有自己的标签。

于 2013-09-09T19:55:33.893 回答