1

我可以通过模型将对象从控制器发送到 jsp 页面,但是在向控制器保存一些数据后,如何将该对象返回到控制器?

我的表格如下所示:

    <form:form method="POST" modelAttribute="user" action="/GENEPI/userChangePassword" commandName="user">      
                        <spring:message code="label.newPassword" />
                        <br>
                        <input id="password" type="password"
                            pattern=".{8,30}" class="input-block-level"
                            onFocusOut="passwordValidation();"
                            title="ERROR" />
            </form:form>

我的控制器是这样的:

@RequestMapping(value = "/userChangePassword", method = RequestMethod.POST)
public String changePasswordPOST(@ModelAttribute("user") UserEntity user,
        @ModelAttribute("newPassword") String newPassword, Model model) {
    System.out.println("USERNAME: " + user.getUsername());

}

尽管如此user,总是null。如何让它将该user对象从 jsp 传递到控制器,并使用用户在那里填充的数据?

编辑:换句话说 - 有什么方法,如何用页面中的model键值对填充地图jsp并将其发布回controller

4

4 回答 4

1

如果将 Spring 与 Spring Form 标签一起使用,则 Spring 使用 Data Binding 的概念。

检查此链接: 使用 Spring 表单库

逻辑是将 Bean 或模型传递给 JSP,用户将输入值,然后将模型传递给控制器​​。您必须使用 @ModelAttribute 来获取模型,然后在获得模型后才能使用它。

我在您的 JSP 和 Controller 中看到两个错误。1.您在同一个模型上使用了modelAttribute和commandName,即。用户。用户 modelAttribute 或 commandName。

2.您的 JSP 中没有名为 newPassword 的模型,您正试图在控制器中获取它。

3.我假设这个用户 Bean 具有您试图从 JSP 设置它的密码属性。所以您必须获取该用户 Bean 而不是单个属性。

如果您仍有疑问,请告诉我。

于 2013-09-09T12:14:15.437 回答
1

can you use spring taglib form and hidden into i.e. table, something like that:

<table align="center" style="position: relative; left: 0px; top: -20px; width: 100%">
  <tr>
   <td width="40%" class="">
    <form:label path="user">Username: </form:label></td>
   <td width="60%" class="">
    <form:input path="usuario" cssClass="" readonly="true"/></td>
  </tr>
    <form:hidden path="password" id="pwdDB" />
  <tr>
   <td width="40%" class="">
    <form:label path="password">Password: </form:label></td>
   <td width="60%" class=""><form:password path="" id="password" cssClass="" maxlength="14"/></td>
  </tr>
  <tr>
   <td colspan="2"><form:hidden path="username" /></td>
  </tr>
  <tr>
   <td colspan="2"><form:hidden path="otherattributePOJO" /></td>
  </tr>
  <tr>
   <td colspan="2"><form:hidden path="anotherattributePOJO" /></td>
  </tr>
</table>

And you put attribute from your POJO onto path.

I hope help you :)

于 2013-09-09T18:51:43.380 回答
1

Ajsp被呈现为 HTML,它作为 HTTP 响应的主体发送给某个客户端。

HTML中没有对象的概念。您对表单所做的是将一些输入字段序列化为请求参数并在新的 HTTP 请求中发送这些字段。在这种情况下,您发送的是 POST。

Spring 使用调用的接口HandlerMethodArgumentResolver来构造@Controller处理程序方法的参数。它使用调用ModelAttributeMethodProcessor来解析具有@ModelAttribute注释的参数的实现。javadoc 状态

模型属性是从模型中获得的,或者如果没有找到,则可能使用默认构造函数(如果可用)创建。一旦创建,属性将通过数据绑定填充请求数据,如果参数使用@javax.validation.Valid 注释,也可以应用验证。

换句话说,如果模型中没有可通过命名键(@ModelAttribute value属性值)访问的属性,Spring 将使用名称与您的类字段名称相同的请求参数构造它。在这种情况下,没有。

如果您希望 SpringUserEntity为您序列化一个对象,您需要将具有与类字段相同属性值的input字段放入表单中,并为这些输入提供一个值,可能是它以前的值。nameUserEntity

查看 Spring 标记库的文档

于 2013-09-09T00:17:14.180 回答
-1

基本思想是,使用 HTTP Post,您通常将输入数据设置为字符串或原始数据类型,然后将数据发布到 servlet。

对于扩展基本 http 框架的所有框架,这个基本思想都是相同的。例如 Struts、Spring MVC、StripesFramework 等。

我建议您熟悉 HTTP 的工作方式。

在您的特定情况下,查找用户的关键信息也应该能够通过让用户输入用户信息(通常是用户名/密码)或将信息存储为隐藏字段来回发到 servlet。

于 2013-09-09T00:16:49.370 回答