【问题标题】:In Spring MVC how do you store user input and reproduce it later on?在 Spring MVC 中,你如何存储用户输入并在以后重现它?
【发布时间】:2014-10-31 09:31:10
【问题描述】:

在我的一个 JSP 中,我让用户输入一些关于他们自己的详细信息。当他们单击提交时,我希望它重定向到的页面记住变量,然后将其打印出来。

例如

(register.jsp) Username: Barney
(welcome.jsp) Welcome Barney
(register.jsp) Username: Vernon
(welcome.jsp) Hello Vernon

当前代码:

@RequestMapping(value = "/register", method = RequestMethod.POST)
public String register(ModelMap map, HttpSession session,
@RequestParam(value="givenUser") String givenUser) {   
session.setAttribute("ans", givenUser);
map.addAttribute("displayAnswer", givenUser);
map.put("givenUser", givenUser);
return "register";
}
}

欢迎请求映射:

@RequestMapping(value = "/welcome", method = RequestMethod.GET)
public String welcome() {
return "welcome"; 
}

然后在welcome.jsp 我有:你好${givenAnswer}

register.jsp,一旦点击里面的链接,就会转到welcome.jsp

这是 register.jsp

    <%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
    <%@ page isELIgnored="false" %>
    <html>
    <head>
        <title>SPRING ####### WEB</title>
    </head>
    <body>
    <h2>SUCCESSFUL REDIRECTION!!!</h2>
    <p>Register</p>

    <form action="/HelloSpring/welcome" method="post">
      Username:  <input type="text" name="givenUser" >
      Firstname: <input type="text" name="givenPassword">
      Surname:   <input type="text" name="givenSurname" >
      Password:  <input type="password" name="givenPassword">
                 <input type="submit" value="Submit">
    </form>

    </body>
    </html>

welcome.jsp

<%@taglib uri="http://www.springframework.org/tags/form" prefix="spring"%>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>SPRING ####### WEB</title>
</head>
<body>
<h2>Spring Page Redirection</h2>
<p>Welcome ${givenUser}, your password is ${givenPassword}</p>


</body>
</html>

所以我的问题是我没有包括什么,因为它目前只是在用户提交详细信息时触发一个空白

【问题讨论】:

  • 欢迎使用 stackoverflow :) 那么到目前为止您尝试了什么?阅读How to Ask

  • 很高兴你能感觉到 ${status.value}!

  • 是否打印任何内容。用您的弹簧控制器代码编辑问题?
  • 您想要的是 3 个元素之间的迭代:JSP 中的表单、控制器和第二个 JSP。您展示了控制器,但由于我的水晶球目前无法使用,您至少可以展示一下表格吗?
  • 你想看什么?控制器已经显示在我的代码中。你想要 answer.jsp 里面的表格吗?

标签: java spring jsp variables spring-mvc


【解决方案1】:

您可以将userinput 属性发布到Controller,然后将值发送回ModelMap。

例子:

@RequestMapping("/hello")
public String hello1(ModelMap map,@RequestParam String userInput){
    /*your code goes here*/     
    map.put("userInput",userInput);
    return "jsp1";   //first jsp name
}

并使用表达式语言在jsp中使用。

你好{userInput}!!

【讨论】:

  • 我确信它比这简单得多。绝对有一种方法可以使用 jstl 来做到这一点,但它目前已经不在我的脑海里了!
  • 不应该单独以上述方式完成。记住 spring 是一个 mvc ,你不能让它像在 servlet 中嵌入 &lt;html&gt; 标签一样显示
  • 好的,所以我已经对第一部分进行了排序。现在只是显示它的问题。如何做到这一点?当然,变量需要以某种方式链接,以便当我说 Hello{userInput} 时它会知道 userInput 指的是什么?
  • 当您使用 map.put("key",value) 将 userInput 的值放入您的 ModelMap 时,可以使用键在返回的 jsp 中访问它。在上面的代码中,键是“userInput”,所以当您访问 ${ userInput} 它会给出值。
  • 我已将我当前的代码添加到问题部分。我仍然只是打招呼,然后是空白。你能看出我做错了什么吗?
【解决方案2】:

&lt;input&gt; 标记中的名称是表单提交时用作请求参数名称的名称。

您至少应该更改控制器代码以使用正确的参数名称:

@RequestMapping(value = "/answer", method = RequestMethod.GET)
public String answer(ModelMap map, HttpSession session,
        @RequestParam("howareyou") String givenAnswer) {

                session.setAttribute("ans", givenAnswer);
                map.addAttribute("displayAnswer", givenAnswer);
                map.put("givenAnswer", givenAnswer);      

            return "answer";
        }

}

我还删除了未使用的参数req,因为 Spring 直接为您提供了HttpSession。在模型中添加两​​次相同的对象通常是没有用的。但我假设你不确定什么是正确的并尝试了两者 - 它们中的任何一个都是正确的并且足够了:-)

【讨论】:

  • 当我尝试此操作时,它开始启动并在读取网络 bean 中说“找不到符号”的基础会话。有什么理由吗?
  • @RedBaron 对不起,我留下了不应该存在的括号。答案已编辑
  • 感谢您的努力。它仍然很烦人,并且没有像我希望的那样生成它。不确定缺少什么。唯一的问题是我把代码放在了错误的地方。
  • 我能问一下你为什么使用modelmap而不是model。有什么区别?我们可以同时使用吗?
  • @RedBaron 我在这里使用ModelMap,因为您在示例中使用了。我不能告诉你哪个更好。我通常使用模型,因为它可以节省 3 个字符来输入 ;-)
【解决方案3】:

成功!显然它需要 ${ param.elc }。为什么这没有在任何教程上,为什么没有人知道它?我仍然有点怀疑,但它正在按要求进行。 感谢所有帮助过的人!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 2021-09-18
    • 2019-12-20
    • 2021-04-06
    • 1970-01-01
    • 2021-06-30
    相关资源
    最近更新 更多