gpt4 book ai didi

java - 对于 JSP 中的 jsp 页面上的每次重新渲染,列表都会变空

转载 作者:行者123 更新时间:2023-12-01 23:16:15 27 4
gpt4 key购买 nike

我是 JSP 的新手,以前经常使用 JSF,但现在需要使用 JSP 构建一个 portlet。

每次用户按下提交按钮时,我都会在 java 代码中的列表中放入一个字符串。但每次列表都被清除并且只有 1 的大小,我不知道为什么。我想每次重新渲染页面时我都会得到一个新的 Main 实例。

如何解决这个问题?

我的 JSP:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<jsp:useBean id="Main" class="com.classes.Main" />

<div>

La Till: <%= request.getParameter("inputText")%>
<form name="myForm" action="" method="post" >
<input type="text" name="inputText" >
<input type="submit" value="Lägg till!">
</form>

<%
String name = request.getParameter("inputText");

if (name != null && !name.isEmpty()) {
Main.addToList(name);
}

%>

<c:forEach var="name" items="${Main.list}">
<tr>
<c:out value="${name}"></c:out>
</tr>
</c:forEach>

我的Java:

public class Main extends HttpServlet {

private List <String> pplList = new ArrayList();

public void addToList(String inName)
{
pplList.add(inName);
}

public List <String> getList()
{
return pplList;
}


public void setList(List <String> inList)
{
pplList = inList;
}

}

最佳答案

从哪里开始...您似乎对如何组合 servlet 和 JSP 有误解,可能是因为您之前接触过 JSF。所以您可能想阅读Java EE tutorial on servlets and JSPs第一的。

话虽如此,让我们看看您的代码。

首先,您必须了解(概念上)您的 JSP 会针对每个请求完整执行。这也意味着<jsp:useBean>标签会根据每个请求进行评估。该标记在您当前的请求属性中查找名为 Main 的 bean。 。如果不存在,则会实例化一个新的。

因此在这种情况下,每次渲染时都会生成一个新的 Main对象被实例化,这意味着字段初始值设定项 private List <String> pplList = new ArrayList();对每个请求执行。

这个问题可以通过使用 scope 来解决属性 <jsp:useBean>像这样:

<jsp:useBean id="Main" class="com.classes.Main" scope="session" /> 

现在标记将查找名为 Main 的 bean在 session 属性中;因此将返回现有的 Main每个后续请求的实例。

这解决了您眼前的问题。

但是,您的Main类(class)很奇怪...

public class Main extends HttpServlet {...

您正在使用Main作为模型(在 MVC 术语中),因此无需扩展 HttpServlet 。事实上,您这样做,表明您想要实现 Model 2小服务程序。再次,我建议您引用Java EE tutorial .

最后,您提到您需要构建一个portlet。不幸的是,Portlet API 与 Servlet API 有所不同——让上述代码工作不会帮助您有效地实现 Portlet。

关于java - 对于 JSP 中的 jsp 页面上的每次重新渲染,列表都会变空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21164622/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com