Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp Spring MVC:无法提取控制器中的pathvariable值_Jsp_Spring Mvc - Fatal编程技术网

Jsp Spring MVC:无法提取控制器中的pathvariable值

Jsp Spring MVC:无法提取控制器中的pathvariable值,jsp,spring-mvc,Jsp,Spring Mvc,我正在研究SpringMVC。我使用的是一个JSP页面,该页面由预先自动生成的变量调用,我必须将它们复制到控制器中以进行进一步处理。但是,它的值是{variablename}。我将发布代码和我正在尝试做的事情。请看一看 控制台输出: Token value is{token} Token verification failed Token in controller is{token} User and password is :myemail@gmail.com and password ch

我正在研究SpringMVC。我使用的是一个JSP页面,该页面由预先自动生成的变量调用,我必须将它们复制到控制器中以进行进一步处理。但是,它的值是{variablename}。我将发布代码和我正在尝试做的事情。请看一看

控制台输出:

Token value is{token}
Token verification failed
Token in controller is{token}
User and password is :myemail@gmail.com and password checkpassword
控制器代码:

 @RequestMapping(value = "/resetpassword")
    public String newPasswordPage(Model model){
        model.addAttribute("person", new Person());
        return "resetpassword";
    }
   @RequestMapping(value = "/newpassword/{token}")
   public String changePasswordFunction(@ModelAttribute("person") Person person, Model model, @PathVariable("token") String token){
        if(person.getNewpassword() == null){

            return "resetpassword";
        } else {
            personService.changePassword(token,person.getUsername(),person.getPassword());
            System.out.println("Token in controller is"+token);
            System.out.println("User and password is :"+person.getUsername()+" and password "+person.getNewpassword());
            model.addAttribute("person",person);
            return "redirect:/";
        }
    }
Resetpassword.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title></title>
</head>
<body>

<c:url var="addAction" value="/newpassword/{token}" ></c:url>
<form:form action="${addAction}" commandName="person">
    <table>
        <tr>
            <td>
                <form:label path="username">
                    <spring:message text="username"/>
                </form:label>
            </td>
            <td>
                <form:input path="username"  />
            </td>
        </tr>

        <tr>
            <td>
                <form:label path="token">
                    <spring:message text="token"/>
                </form:label>
            </td>
            <td>
                <form:input path="token"  />
            </td>
        </tr>


        <tr>
            <td>
                <form:label path="newpassword">
                    <spring:message text="newpassword"/>
                </form:label>
            </td>
            <td>
                <form:input path="newpassword"  />
            </td>
        </tr>
        <tr>
            <td>
                <input name="submit" type="submit" value="Submit" />
            </td>
        </tr>
    </table>
</form:form>
</body>
</html>

我认为您只是缺少了c:url中的令牌的$。请试一试

<c:url var="addAction" value="/newpassword/${token}" ></c:url>

我发现调试此类控制器问题非常有用的一种方法是使用以下方法编写单元测试:

运行上述测试将向控制台输出以下内容(您可能希望注释掉调用personService.changePassword()以简化单元测试设置,或者使用模拟框架模拟person服务对象):

现在,如果您想要提取似乎由“:”字符分隔的变量,您可以将请求映射方法签名更改为如下内容:

@RequestMapping(value = "/newpassword/{token1}:{token2}:{token3}")
public String changePasswordFunction(@ModelAttribute("person") Person person, Model model, @PathVariable("token1") String token1, @PathVariable("token2") String token2, @PathVariable("token3") String token3)

没有什么可提取的。。。
token
的值是
{token}
,您将其硬编码到页面中。您正在提交一个名为token的参数,该参数不是URI的一部分。我的URI类似于以下localhost:8085/newpassword/emailid:tokens。URL将自动生成并发送给用户。如何将emailid:tokens提取为一个实体?有什么想法吗?我应该在控制器中也这样做吗?没有。控制器很好。我认为有问题,因为现在当我单击提交按钮时,控制器中的方法没有被调用。。。无论我按了多少次,请在按下按钮后发布你看到的URL。URL保持不变,即
Token in controller ismyemail@gmail.com:1416653626993:VZelDNRi9pU_ZD6bCzuyFMaJU-Y2pXU7wajMD4I8gtg
@RequestMapping(value = "/newpassword/{token1}:{token2}:{token3}")
public String changePasswordFunction(@ModelAttribute("person") Person person, Model model, @PathVariable("token1") String token1, @PathVariable("token2") String token2, @PathVariable("token3") String token3)