gpt4 book ai didi

java - JSP 页面无法识别我的数据类型

转载 作者:行者123 更新时间:2023-11-30 05:00:17 30 4
gpt4 key购买 nike

我正在将 Eclipse Helios 与 Struts 一起使用,并且遇到了我想象中的菜鸟问题:我一生都无法弄清楚为什么我的 jsp 页面不会承认我的业务对象 .java 文件。

我认为这与 .java 类文件有关,因为我无法让它们出现在“库资源”标题下的“导入类”部分中。到目前为止,我能做的最好的事情就是将类文件作为单独的 jar 加载(当然,它仍然不会出现在 IMPORTED CLASSES 部分中)。

有谁知道为什么我的 cart.jsp 文件不允许我引用我的 Cart.java 业务对象?当我尝试创建下面的 Cart、LineItem 和 Product 对象时,出现空指针错误。

以下是一些片段:

webapp\WebContent\example\cart.jsp

 <%@ page import="bo.*, java.util.ArrayList" %>
<%
Cart cart = (Cart) session.getAttribute("cart");
ArrayList<LineItem> items = cart.getItems();
for (LineItem item : items)
{
Product product = item.getProduct();
%>

<tr valign="top">
<td>
<form action="<%=response.encodeURL("cart")%>" method="post">
<input type="hidden" name="productCode"
value="<%=product.getCode()%>">
<input type=text size=2 name="quantity"
value="<%=item.getQuantity()%>">
<input type="submit" value="Update">
</form>
</td>
<td>
<%=product.getDescription()%>
</td>
<td>
<%=product.getPriceCurrencyFormat()%>
</td>
<td>
<%=item.getTotalCurrencyFormat()%>
</td>
<td>
<form action="<%= response.encodeURL("cart")%>" method="post">
<input type="hidden" name="productCode"
value="<%=product.getCode()%>">
<input type="hidden" name="quantity"
value="0">
<input type="submit" value="Remove Item">
</form>
</td>
</tr><% } %>

Java 资源\src\bo\Cart.java

 package bo;

import java.util.*;
import java.io.Serializable;

public class Cart implements Serializable
{
private ArrayList<LineItem> items;

public Cart()
{
items = new ArrayList<LineItem>();
}

public void setItems(ArrayList<LineItem> lineItems)
{
items = lineItems;
}

etc. . . .

Java 资源\src\bo\DisplayCartServlet.java

 package action;

import java.io.*;
import java.sql.SQLException;

import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.struts.action.*;

import bo.*;
import dao.*;

public class DisplayCartServlet extends Action
{
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{

String forward = new String("success"); ;
String productCode = request.getParameter("productCode");

HttpSession session = request.getSession();

Cart cart = (Cart) session.getAttribute("cart");
if (cart == null)
{
cart = new Cart();
session.setAttribute("cart", cart);
}

int quantity = 1;

// Get product from product code
Product product=null;
try {
product = ProductDB.selectProduct(productCode);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
session.setAttribute("product", product);

// If product exists, add or remove from cart
if (product != null)
{
LineItem lineItem = new LineItem();
lineItem.setProduct(product);
lineItem.setQuantity(quantity);
if (quantity > 0)
cart.addItem(lineItem);
else
cart.removeItem(lineItem);
}
session.setAttribute("cart", cart);

return(mapping.findForward(forward));
}

}

Struts.xml 声明:

 <struts>

<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />

<package name="example" namespace="/example" extends="struts-default">

<action name="cart" class="action.DisplayCartServlet" method="execute">
<result name="success">/example/cart.jsp</result>
</action>

</package>
. . . .
</struts>

请求操作/servlet 的链接:

 <div id="cartLink"><a href="<s:url action="cart?productCode=XM123456"/>">Add to Cart</a></div> 

最佳答案

您期望购物车出现在(新的)HttpSession 中。假设 HttpSession 存在,因为您正在 tomcat/jetty 中运行,并且这些 servlet 容器中的任何一个都会为您创建一个 session 。

现在您在该 session 中请求购物车。你为什么期望它在那里?

Cart cart = (Cart) session.getAttribute("cart");

如果 session.getAttribute("cart") 返回 null ,您可以创建一个并将其存储在 session 对象中。

关于java - JSP 页面无法识别我的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6989068/

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