【问题标题】:Value mismatch while passing attribute from Servlet to jsp将属性从 Servlet 传递到 jsp 时值不匹配
【发布时间】:2017-05-21 05:54:03
【问题描述】:

在 Servlet 中设置值并使用 RequestDispatcher 在 jsp 中检索它

在 test1Servlet 中:

request.setAttribute("Alpha",alpha);

RequestDispatcher rd = request.getRequestDispatcher("Test.jsp");

rd.forward(请求,响应);

在 Test.jsp 中: 单击按钮时,我正在使用请求属性值对另一个 servlet 进行 ajax 调用

$(document).ready(function(){

  $(".button1").click(function(){
            $.ajax({

  type: "POST",

  url: "<%=request.getContextPath()%>/test2Servlet", 

 data: {"alpha":<%=request.getAttribute("alpha")%>,"ins":10},

 dataType:"text",

在这种情况下,如果我在 test1Servlet 中将 alpha 值设置为 0017,那么在 jsp 中将得到 0015。

这个值是如何改变的?

请任何人帮我解决这个问题。

【问题讨论】:

  • 不可能。您必须在两者之间进行更改。你能发布 servlet 和 JSP 的完整代码吗?
  • 发布minimal reproducible example 以及输入的准确描述以及预期和意外输出。也就是说,您忘记展示您是如何声明和读取这些变量的。您使用的值使用八进制表示法而不是十进制表示法,因此您在那里犯错的可能性很大。
  • 我的回答有帮助吗?然后,您可以通过单击左侧的复选标记和向上箭头来接受并投票。如果仍有问题,请提供更多信息。

标签: java jsp servlets


【解决方案1】:

那里没有错误。您将获得正确的价值。
在许多语言中,以零开头的数字被解释为八进制或十六进制:

  • 八进制:017 = 15
    (因为 1 被评估为 8 和 7 原样。所以 1×8+7=15)。
  • 十六进制:0x17 = 1×16 + 7 = 23

试试看:

<script>
    var x = 0017;
    var y = 0x17;
    alert("x:" + x);
    alert("y:" + y);
</script>

由于 post 参数被转换为字符串,您可以将值放在引号中。或者避免在数字中使用前导零。

【讨论】:

  • 是的,你是对的,但不确定它在哪里更改为八进制,因为我从会话中获取值并将其存储为字符串并在 request.setAttribute(alpha) 中使用相同的值。
  • 使用下面的代码从会话中获取价值,我不能忽略前面零的 HttpSession session = request.getSession();字符串 alpha=request.getParameter("alpha"); session.setAttribute("alpha", alpha);
  • 如何在 test1Servlet 中设置alpha?它是什么类型的?显示定义。
  • 将值放在引号中是指 jsp ajax 调用:data: {"alpha": '&lt;%=request.getAttribute("alpha")%&gt;',"ins":10}。在 &lt;%...%&gt; 周围加上单引号。
猜你喜欢
  • 1970-01-01
  • 2013-11-25
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 2014-06-22
  • 1970-01-01
相关资源
最近更新 更多