如何使用request.setAttribute()通过单击链接来设置和传递值

时间:2016-06-22 04:43:05

标签: java jsp servlets

我想通过在用户点击链接时使用request.setAttribute()和request.getAttribute()将rowNo的值从一个jsp文件传递到另一个jsp文件(以显示该行上的图像)。

但是当我尝试在第二个jsp页面上使用request.getAttribute()时,它会给出以下异常: org.apache.jasper.JasperException:java.lang.NumberFormatException:null

在Index.jsp页面上我有:

<%!
 int temp = 1;

 %>

<a href="single.jsp" onclick="<%= request.setAttribute("val", temp) %>" > 
<i class="glyphicon glyphicon-menu-right icon"></i> </a>

在single.jsp页面上:

<%

dbConnect con = new dbConnect(); 
ResultSet r = con.getConnection().executeQuery("select * from tblpic "); 

String tp = (String) (request.getAttribute("val"));

int i = Integer.parseInt(tp);

r.absolute(i);

%>

<div class="thumb-image"> <img src="<%= r.getString(2) %>" data-imagezoom="true" class="img-responsive"> </div>

r.absolute(i)用于移动到表格中的特定行。

我在两个jsp页面上都添加了这个文件(我不知道是否有必要)&lt;%@ page import =“javax.servlet.http.HttpServletRequest”%&gt;

我正在研究net bean和struts框架。

3 个答案:

答案 0 :(得分:3)

您将服务器端代码和客户端代码混合在一起。 “request”是一个java对象,是servelet请求处理的一部分。它只在服务器端工作,同时在servlet容器中呈现jsp。

“onclick”是在浏览器端运行的java脚本点击触发器。

页面显示后,“请求”不是记录器有效。点击提交新请求时,将创建新的请求对象。

对于您来说,可以轻松地将参数参数传递给jsp,如下所示。

在第一个jsp:

<a href="single.jsp?val=temp" >

第二个jsp上的

<%=request.getParameter("val")%>

答案 1 :(得分:1)

我希望session.setAttribute()代替request.setAttribute()将值从一个jsp传递到另一个jsp。

所以你的代码将是:

<a href="single.jsp" onclick="<%= session.setAttribute("val", temp) %>" > 

String tp = (String) (session.getAttribute("val"));

答案 2 :(得分:1)

您正在请求范围中设置值。请求范围属性只能在同一请求中访问。每当最终用户点击链接(由提供者)时,就会生成一个新请求,因此您将丢失您在上一个请求中设置的属性。

解决您可以解决的问题

1)Piyush Aghera解释的URL转发

2)您可以按照PVR

的说明将值存储在会话中

3)如果您希望仅将值存储在请求属性中,那么我建议您使用RequestDispatcher转发您的请求。这可以起作用,因为您在下一页上的请求将保持不变。