你能帮我提出解决方案吗? 有JSP页面将表单参数发送给servlet。 通常我通过HttpServletRequest.getParameter()解析参数,该参数适用于具有微小参数编号的表单。 现在我正在开发具有大量参数数量的JSP的应用程序,并且标准的表单处理方式不方便。 我认为可能的解决方案可能是使用-action。 我不明白它是否适合我。 我浏览了很多材料但却一无所获。 我的意思是有关于在jsp中获取表单参数的可能性的任何信息, 自动创建实体类的实例, 将所有参数映射到entity-properties并将实体实例发送到servlet。 请看一下代码:
的index.jsp
<html>
<head>
<title></title>
</head>
<body>
<form method="post" action="NewFormServlet" enctype="application/x-www-form-urlencoded">
<jsp:useBean id="client-bean" class="model.entity.Client" scope="request"/>
<h3>Please enter client information</h3><br>
Client first name<input type="text" name="first-name"/><br>
<jsp:setProperty name="client-bean" property="firstName" value="${requestScope.first-name}"/>
Client last name<input type="text" name="last-name"/><br>
<jsp:setProperty name="client-bean" property="lastName" value="${requestScope.last-name}"/>
Client address<input type="text" name="address" size="100"/><br>
<jsp:setProperty name="client-bean" property="address" value="${requestScope.address}"/>
Client city<input type="text" name="city"/><br>
<jsp:setProperty name="client-bean" property="city" param="${requestScope.city}"/>
Client postal code<input type="text" name="postal-code"><br>
<jsp:setProperty name="client-bean" property="postalCode" value="${requestScope.postal-code}"/>
<input type="hidden" name="jsp-identifier" value="client-form">
<input type="submit" value="Submit">
</form>
</body>
</html>
此代码中有什么不正确?提前谢谢。
答案 0 :(得分:2)
您应首先考虑服务器上发生的情况以及浏览器中发生的情况,以及通过HTTP传输的内容。表单提交使用了许多阶段:
HttpServletRequest
调用适当的servlet方法反映当前的HTTP请求,以及HttpServletResponse
以准备处理后将发送回浏览器的内容这意味着,在servlet处理提交的表单时,您在JSP部分中请求属性的任何操作都将丢失。您只能依赖会话属性,以及可作为请求参数访问的输入表单字段。
因此,使用当前的JSP,Servlet将不会在请求属性中找到任何内容(它是一个不同的HttpServletRequest),并且只能使用名称为firstName
的{em>参数,{{1 }},lastName
,address
等
我能理解这不是预期的答案,但HTTP协议就是这样......
每条评论编辑:
您可以将该属性放在会话中,然后servlet将使用与JSP相同的会话。但请再读一遍我上面写的内容,并在事情发生时思考:
city
bean,并将其放入会话范围,并使用其值初始化表单字段。停止服务器部分Client
bean具有空值对不起,但是服务器没有足够的魔力来自动查找表单提交的属性(请求或会话):它只存在于请求参数中,它是servlet作业来处理它们并最终将它们放在属性中。
答案 1 :(得分:1)
编辑: 似乎jsp:useBean是一种旧学校方式,用于收集一组参数值,以便在页面上更容易地显示。 发布请求时,它不会添加属性。
基于此, 我在jsp:useBean标签中看不到什么价值, 因为您可以使用el表达式来访问您在servlet中设置的属性。
这无助于将已发布的参数值放入servlet中的bean中。
您可以在bean上编写一个方法,以从请求中提取参数值(访问者模式)。 例如:
class bean
{
private String value;
public void loadFromHttpServletRequest(final HttpServletRequest request)
{
value = request.getParameter("value");
}
}
考虑使用像spring-mvc这样的软件包。