使用 Java 的购物车应用程序

Shopping Cart Application using Java

提问人:julio11 提问时间:7/28/2023 最后编辑:julio11 更新时间:7/29/2023 访问量:99

问:

我正在处理一个 Java 挑战。我想创建一个应用程序,将书籍列表显示为 h:selectOneRadio 元素。当用户提交表单时,将用户的选择存储在@SessionScoped受管 Bean 中。允许用户返回到书籍列表并进行其他选择。提供用于查看购物车的链接。在购物车页面上,显示用户所做的选择列表、每本书的价格以及购物车中所有书籍的总和。

这是我目前所拥有的:

SelectionsBean.java

package sessiontracking;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean( name="selectionsBean" )
@SessionScoped
public class SelectionsBean implements Serializable {

    private static final long serialVersionUID = 1L;

    private final Map<String, Double> pricesMap;

    private List<String> selections;

    public SelectionsBean() {
        pricesMap = new HashMap<>();
        pricesMap.put("Java How to Program", 139.95);
        pricesMap.put("C++ How to Program", 119.95);
        pricesMap.put("iPhone for Programmers: An App-Driven Approach", 49.95);
        pricesMap.put("Android for Programmers: An App-Driven Approach", 49.95);

        // initialize selections list
        selections = new ArrayList<>();
    }

    public void addToCart(String selection) {
        selections.add(selection);
    }

    public void removeFromCart(String selection) {
        selections.remove(selection);
    }

    public double getTotalPrice() {
        double totalPrice = 0.0;
        for (String selection : selections) {
            totalPrice += pricesMap.get(selection);
        }
        return totalPrice;
    }

    public List<String> getSelections() {
        return selections;
    }

    public void setSelections(List<String> selections) {
        this.selections = selections;
  
}


index.html

<?xml version='1.0' encoding='UTF-8' ?>
<!-- index.xhtml -->
<!-- Allow the user to select a book -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Book Selection Page</title>
</h:head>
<h:body>
<h1>Welcome to the Bookstore!</h1>
<p>You have selected #{selectionsBean.Size} book(s).
</p>
<h3>Select a Book and Press Submit</h3>
<h:form>
<h:selectOneRadio id="bookSelectOneRadio" required="true"
requiredMessage="Please choose a book, then press Submit"
value="#{selectionsBean.selectedBook}">
<f:selectItem itemValue="java" itemLabel="Java How to Program"/>
<f:selectItem itemValue="cpp" itemLabel="C++ How to Program"/>
<f:selectItem itemValue="iphone"
itemLabel="iPhone for Programmers: An App-Driven Approach"/>
<f:selectItem itemValue="android"
itemLabel="Android for Programmers: An App-Driven Approach"/>
</h:selectOneRadio>
<p><h:commandButton value="Submit"/></p>
</h:form>
<p><h:outputLink value="cart.xhtml">
Click here to view your shopping cart
</h:outputLink></p>
</h:body>
</html>

cart.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!-- cart.xhtml -->
<!-- Display the user's shopping cart -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Shopping Cart</title>
</h:head>
<h:body>
<h1>Shopping Cart</h1>
<h:dataTable value="#{cartBean.cart}" var="item">
<h:column>
<f:facet name="header">Book Title</f:facet>
#{item.title}
</h:column>
<h:column>
<f:facet name="header">Price</f:facet>
#{item.price}
</h:column>
</h:dataTable>
<p>Total price: #{cartBean.totalPrice}</p>
<p><h:outputLink value="index.xhtml">
Click here to continue shopping
</h:outputLink></p>
</h:body>
</html>

每当我必须编译时,我都会出现此错误:

/index.xhtml:类“会话跟踪”。SelectionsBean' 没有属性 'Size'。

我有点卡住了,在代码中看不到如何解决。

Java XHTML的

评论


答:

1赞 TP95 7/28/2023 #1

在您的索引.html中,有问题的行是:

<p>You have selected #{selectionsBean.Size} book(s).

selectionsBean.Size 将抛出错误,因为 SelectionsBean 类中没有定义名为“Size”的属性。

看看这句话,我假设您正在尝试显示客户所做的选择的数量,因此请使用:

<p>You have selected #{selectionsBean.selections.size()} book(s).

为什么会这样?好了,在 SelectionsBean 类中,您定义了这个名为“selections”的属性:

private List<String> selections;

“selections” 是一个 List 类型,它具有内置方法,如 Size(),它返回该列表中的元素数量,因此您可以使用它。请务必检查 null 值,因为 selections 变量仅在构造函数 SelectionsBean() 中初始化。

评论

0赞 julio11 7/28/2023
进行这些更改会给我带来另一个错误:找不到方法:class java.util.ArrayList.selectedBook()
1赞 TP95 7/28/2023
同样,与第一个错误类似,您的类中没有方法“SelectedBook()”。冒犯的行是你有其中的两个。value="#{selectionsBean.selectedBook}">
0赞 julio11 7/28/2023
谢谢!一切都修好了。现在,当我运行代码并且 Web 应用程序出现时,当我选择书籍并提交时,我收到的错误是:为“null Converter”设置值“java”的转换错误。