我在跟踪代码时面临一个问题,
这下面的代码工作正常,当我把调试指针放在这个地方但是如果我尝试执行没有调试指针它不能正确读取所以我没有得到确切的值。所以这将最后保存的价值带到这个地方..是否与任何同步相关的问题? 所有我想要的解决方案是这行应该在执行时如何在调试时工作?
if(session.getAttribute("lightingDesc")!=null)
{
lightingDesc=(String)session.getAttribute("lightingDesc");
}
找到上述问题的根本原因..这是代码:document.strikeoffForm.submit();
window.open('<%= baseURL%> /jsps/makeStrikeOffs/Print.jsp',“printStrikeoff”);
它因异步调用而发生。
问题是我这样做.. 1.提交表格2.打开新窗口显示提交的值。但是在提交表格之前的某个时间发生了2次行动。我认为Ajax中的解决方案,但我不知道该怎么做..任何帮助将不胜感激。
答案 0 :(得分:2)
您的应用程序是否使用线程?某些其他线程可能会将此值放入会话中。在调试和运行期间发生以下情况:
如果运行,该线程可能会在另一个线程放入值之前执行,因此无法找到该值。
在调试的情况下,IDE会停止/阻止当前线程,因此,另一个线程可能有机会放置值,这可能是您在调试时获取值的原因。
其中一个解决方案是使用线程类的join()方法,以便此线程可以等到生产者线程放入值。
答案 1 :(得分:0)
调试工作不是一个正当理由。
最可能的原因是在其他地方你再次设置attribute value
,这是在这行代码之后。
答案 2 :(得分:0)
嗨所有感谢您的所有投入。这可能是不正确的方式,但对于现在它的工作正常,所以它对我好..我给出了这样的解决方案:
document.strikeoffForm.submit();
<% Thread.sleep(500)%>
window.open('<%= baseURL %>/jsps/makeStrikeOffs/Print.jsp', "printStrikeoff");