Java 从JSP获取对象

Java 从JSP获取对象,java,jsp,spring-mvc,Java,Jsp,Spring Mvc,我可以通过模型将一个对象从一个控制器发送到一个jsp页面,但是在保存了一些数据之后,如何将该对象返回到控制器呢 我的表单如下所示: <form:form method="POST" modelAttribute="user" action="/GENEPI/userChangePassword" commandName="user"> <spring:message code="label.newPasswor

我可以通过模型将一个对象从一个控制器发送到一个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>
然而,
user
总是
null
。如何将
user
对象从jsp传递到控制器,其中包含用户在其中填充的数据


编辑:换言之-有什么方法,如何使用
jsp
页面中的成对键值填写
模型
映射,然后将其发布回
控制器

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

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

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


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

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

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

Spring使用一个调用的接口为
@Controller
处理程序方法构造参数。它使用一个名为的实现来解析具有
@modeldattribute
注释的参数。javadoc声明

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

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

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


看看for-Spring的标记库。

如果您将数据绑定与Spring表单标记一起使用,那么Spring将使用数据绑定的概念

检查此链接:

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

我在JSP和Controller中看到两个错误。 1.您在同一个模型(即用户)上使用了modelAttribute和commandName。 用户模型属性或命令名

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

3.我假设这个用户Bean具有Password属性,您正试图从JSP设置它。因此,您必须获取该用户Bean,而不是单个属性


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

您可以使用spring taglib
表单
并隐藏到例如
中,类似于:

<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>

用户名:
密码:
然后将POJO中的属性放到
路径上


我希望能帮助你:)

Spring不是Spring MVC。是的,没错,我的错。另一方面,Spring MVC框架是Spring框架的一个子集,所以我认为在这里添加
Spring
标记没有任何错误。虽然Spring MVC是Spring的一部分,
[Spring]
标记用于spring核心问题。我不做spring MVC,但我认为spring MVC可以帮助您利用开发,而不是在每个方法上传递
HttpServletRequest请求
,手动执行
request.getParameter
。我理解这一点,但我不知道,也无法找到答案,如果你知道我的意思,@dworza如果你想让Spring为你序列化一个
UserEntity
对象,你需要把
input
字段放在与
UserEntity
类字段具有相同
name
属性值的表单中,并给那些
输入值
一个值,可能是它以前的值。@dworza@luigimendoza示例很难写:(.我链接了一个。如果我理解得很好,那么我可以向jsp添加类似
的内容,然后通过
@modeldattribute(“newPassword”)
从我的控制器访问到2)你说得对,这就是重点。我不知道如何将值传递给控制器3)我不想在我的
UserEntity
中存储
newPassword
,因为这样会导致数据库层混乱……而且我认为只为存储一个属性而实现特殊bean是不值得的。必须有其他方法,如何只将一个字符串传递给控制器,不是吗?@Dworza请求中必须有某个对象可以将字段绑定到该对象。因此,您需要将一个对象(您可以称之为bean、模型或任何东西)传递给jsp,该jsp填充了用户数据,然后返回给控制器。如果您的表单只有一个字段,那么我会问您表单中只有一个字段值得吗?如果您有其他字段,那么你就不必创建一个新的bean了,只需再添加一个变量就可以了
<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>