日期:2014-05-17  浏览次数:20675 次

使用隐藏域传递参数到servlet的问题
本帖最后由 u010687889 于 2013-10-10 12:00:35 编辑
我想把表中的某行参数传递到servlet中代码如下
 <%
     int id = rs.getInt("clientId");
    %>
    <td><input type="hidden" name="clientId" value="<%= id %>"/></td>
    <td height="22" colspan="4" bgcolor="#FFFFFF" class="STYLE3"><div align="center"><input type="submit" name="submit" value="修改" onclick="alert('<%=id %>')"/></div></td>

我从数据库中获取clientId,然后传到servlet,测试的时候,用alert可以看到id会随着行号不一样而变化,但是传到servlet中事,打印出来的clientId始终为1,servlet代码如下
package com.orange.khglxt;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.orange.khglxt.beans.DbDao;

public class ChangeClient extends HttpServlet {

public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException,IOException {

request.setCharacterEncoding("GBK");
response.setContentType("text/html");
String clientId = request.getParameter("clientId");
System.out.println(clientId);
RequestDispatcher rd;
request.setAttribute("clientId", clientId);
rd = request.getRequestDispatcher("/change.jsp");
rd.forward(request,response);
}
}


请问是什么问题呢?

------解决方案--------------------
这是form里有很多
<input type="hidden" name="clientId" value="<%= id %>"/>
然后后台获取clientId的值?

另外写个
<form id="testForm" name="testForm" action="" method="post"/>
修改后提交的时候
var url = "....?clientId=" + clientId;//clientId是你修改了的数据的id
testForm.action = url;
testForm.submit();
------解决方案--------------------
“测试已通过,谢谢。另外,我想问一下为什么直接传到servlet不行呢?”

原因是这样的:
因为在页面中你提交了多个clientId:(多行中都有相同name的参数)

<input type="hidden" name="clientId" value="<%= id %>"/>


所以传送到服务器端应该接收的是数组类型的参数,是有多个值的。
如果用request.getParameter(),始终只会获一个值,这个方法返回string。

想获得多个值时应该用request.getParameterValues(),这个方法返回String数组。