在初次使用EL时发现了一个问题。。requestScope传值无效

爱花的石头 2010-07-05 07:01:38
我在两个页面中测试使用EL。。。结果发现 Form表单action提交到另一页面和利用 <A> 标签时。。requestScope无效
不能在另一页面中使用 requestScope 获得值 。。。,,而 sessionScope 和 applicationScope 都可以用。。。。

当我利用 request.getRequestDispatcher("showEl.jsp").forward(request,response); 这个进行页面跳转时就有可以用了。。

这是为什么 ??

以下是代码 :


<body>
<%
request.setAttribute("request","在request中设置的值");
session.setAttribute("session","在session中设置的值 ");
application.setAttribute("application","在application中设置的值 ");
%>

<form action="Jsp/showEl.jsp">
<tr>
<td>用户名:</td>
<td><input type="text" name="txtName"/></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="txtPwd"/></td>
</tr>
<tr><td colspan="2"><input type="submit" value="测试 El——JSTL"/></td></tr>
</form>
<a href="Jsp/showEl.jsp?request=123">测试利用超连接传值</a>
<%
// request.getRequestDispatcher("showEl.jsp").forward(request,response); 不使用时不能传值 ,使用后可传值
%>
</body>
</html>


另一个页码的代码:

<table>
<tr>
<td>在这里测试EL——JSTL,显示传过来的值</td>
</tr>
<tr>
<td>${param.txtName }</td>
</tr>
<tr>
<td>${param.txtPwd }</td>
</tr>
<tr>
<td>${requestScope.req}</td>
</tr>
<tr>
<td>${sessionScope.session}</td>
</tr>
<tr>
<td>${applicationScope.application}</td>
</tr>
</table>


页面显示图:

在这里测试EL——JSTL,显示传过来的值


在session中设置的值
在application中设置的值


问题: 为什么 表单的action 和 a 标签进行页面跳时无效??难道这两个是重定向的??请高手说明一下。
...全文
838 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
爱花的石头 2010-07-18
  • 打赏
  • 举报
回复
经过研究,发现了一个问题,提交和超链接时,地址栏都改变了,这不就是重定向吗?? 可能这就是没有
值得到值的原因,一般来说。。在先在 servlet中设置attribute再在通过request.getRequestDispatch()跳转到页面中通过 requestScope获得的。而我是在两个页面中。。所以有点误差。。。

感谢大家的回答。。对我有用。。谢谢。。
爱花的石头 2010-07-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 silence_smile 的回复:]
<a></a> 是重定向的没错
<form></form>应该是可以的啊
你的<td>${requestScope.req}</td>应该是<td>${requestScope.request}</td>吧?
[/Quote]


额。。是的。。。我发贴时是发错了。。不好意思。。实际代码上两个地方都是 req的
Silence_Smile 2010-07-06
  • 打赏
  • 举报
回复
<a></a> 是重定向的没错
<form></form>应该是可以的啊
你的<td>${requestScope.req}</td>应该是<td>${requestScope.request}</td>吧?
nixiang12 2010-07-06
  • 打赏
  • 举报
回复

request.setAttribute("request","request值");
request.getRequestDispatcher("showEl.jsp").forward(request,response);



另外一边就能调用 el 表达式了

${requestScope.request}
gaoxiang519 2010-07-06
  • 打赏
  • 举报
回复
使用<a>跳转,是客户端跳转,无法保存上个页面的request,新页面会产生新的request,所以你当然取不到。
而你用request.getRequestDispatcher("showEl.jsp").forward(request,response);把request和response都传递到了新的页面,因此获取。
closewbq 2010-07-06
  • 打赏
  • 举报
回复 1
通过form提交的表单通过param.属性可以拿到
至于放在request中的数据。如果通过表单提交肯定可以,因为发起了一次请求。如果通过连接跳转过去便得不到。如果是<a href="Jsp/showEl.jsp?request=123">测试利用超连接传值</a>这种形式也通过${param.request}来获取值

yangyun_ncs 2010-07-06
  • 打赏
  • 举报
回复
${param.txtName } 这个也拿不到值吗?
${requestScope.req} 这个应该是拿不到的,以为你在JSP页面上 放进的那个请求 和你 想拿值的那个JSP 不是一个请求
也就是说 你第一个页面 上用这个表达式 是能取到的 而 到了第2个 是取不到的 2个request 不是同一个
办法就是 把这个 request.setAttribute("request","在request中设置的值"); 放进action中
或者 页面用转发
sumwers 2010-07-06
  • 打赏
  • 举报
回复

form表单中的值是通过request.getParameter获取的,只接受java.lang.String,而EL表达式读取的应该是Attribute中的对象
a476249912 2010-07-05
  • 打赏
  • 举报
回复
懂一点,大家一起讨论下吧 。
应该来说action是可以,如果你用了struts的话,action='*.do'跳到Action中,在mapping.forword("name");
那么在页面上是可以拿到的。
<a></a>标签就是重定向肯定拿不到
如果有错的话再一起讨论,楼主可以百度下
a476249912 2010-07-05
  • 打赏
  • 举报
回复
懂一点,大家一起讨论下吧 。
应该来说action是可以,如果你用了struts的话,action='*.do'跳到Action中,在mapping.forword("name");
那么在页面上是可以拿到的。
<a></a>标签就是重定向肯定拿不到
如果有错的话再一起讨论,楼主可以百度下

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧