【问题标题】:Call a servlet page from a jsp page onload event only once仅从 jsp 页面 onload 事件调用 servlet 页面一次
【发布时间】:2013-03-05 13:52:55
【问题描述】:

我有一个 jsp 页面,我想在其中显示 2 个要使用 servlet 返回的值填充的列表。这应该在 jsp 页面加载后立即发生,所以我通过 jsp 的 onload 函数调用了 servlet页 。我能够在页面上获取列表,但它会一次又一次地进入无限循环调用 servlet 并显示相同的值。

在我的 test2.jsp 中,我使用它在加载 jsp 页面时调用 servlet

function load()
{

document.location.href="/OnaUIDemo/ona?";

}

在我的 ona servlet 中,我正在使用它,

RequestDispatcher rd = getServletContext().getRequestDispatcher("/test2.jsp");

我发现是因为它通过页面加载调用 servlet,而且 servlet 也重定向到同一个 jsp。 jsp 再次加载导致一次又一次无限加载。 请帮我控制一次 servlet 调用。

【问题讨论】:

  • 改写你的问题,清楚地说明你在做什么,你面临的问题是什么以及你想要达到什么目标,注意每句开头的单词大小写。
  • 摆脱 load() 的废话,只需将链接或浏览器地址栏中的 URL 更改为 servlet 而不是 JSP 之一。这现在有意义吗?
  • BalusC 是对的。只需调用 servlet,它会执行业务逻辑并分派到您的 test2.jsp 站点。使用表达式语言,您可以从 .jsp 访问您在 servlet 中计算的列表。

标签: java javascript jsp servlets


【解决方案1】:

你真的需要使用servlet吗?可以使用POJO来完成。

创建一个将返回这两个列表的类。

public class test{

public List getList1()
{
//do your stuff here to add values in list
return list;//return your list 
}
public List getList2()
{
//do stuff here
return list;//return your list
}
}

在你的jsp中,调用这两个函数就行了

<%
test t = new test();
List l1=t.getList1();
List l2=t.getList2();
//now you have the two list,just show them
%>

正如所指出的,不鼓励使用 scriptlet。您可以使用 jstl

<jsp:useBean id="obj_name" type="package_name.class_name" />

这相当于 现在在 jstl 中迭代并显示列表值

<c:forEach var="content" items="${obj_name.list1}">
c:out value="${content}" />
</c:forEach>

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
  • 2011-05-01
  • 2021-01-27
相关资源
最近更新 更多