Java 从JSP获取对象
我可以通过模型将一个对象从一个控制器发送到一个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
<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>