Я работаю над вызовом Java. Я хочу создать приложение, отображающее список книг в виде элемента h:selectOneRadio. Когда пользователь отправляет форму, сохраните выбор пользователя в управляемом компоненте @SessionScoped. Разрешить пользователю вернуться к списку книг и сделать дополнительный выбор. Укажите ссылку для просмотра корзины. На странице корзины отобразите список сделанных пользователем выборов, цену каждой книги и общее количество всех книг в корзине.
Это то, что у меня есть до сих пор:
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: класс sessiontracking.SelectionsBean не имеет свойства Size.
Я как бы застрял и не вижу в коде, как решить.




В вашем index.html оскорбительная строка:
<p>You have selected #{selectionsBean.Size} book(s).
selectionsBean.Size выдаст ошибку, потому что в вашем классе SelectionsBean не определено свойство Size.
Глядя на предложение, я предполагаю, что вы пытаетесь показать количество выборов, сделанных клиентом, поэтому вместо этого используйте:
<p>You have selected #{selectionsBean.selections.size()} book(s).
Почему это сработало? Что ж, в вашем классе SelectionsBean вы определили это свойство под названием «выборки»:
private List<String> selections;
«выборки» — это тип списка, который имеет встроенные методы, такие как Size(), которые возвращают количество элементов в этом списке, поэтому вы можете использовать это. Обязательно проверьте наличие нулей, потому что ваша переменная selections инициализируется только в вашем конструкторе SelectionsBean().
Опять же, как и в случае с вашей первой ошибкой, в вашем классе нет метода "SelectedBook()". Оскорбительная линия value = "#{selectionsBean.selectedBook}"> У вас их две.
Спасибо! Все было исправлено. Теперь, когда я запускаю код и появляется веб-приложение, когда я выбираю книгу и отправляю сообщение об ошибке, которое я получаю: значение параметра «Ошибка преобразования» «java» для «нулевого преобразователя».
любые советы о том, как очистить значение параметра «Ошибка преобразования» «java» для «нулевого преобразователя».
Внесение этих изменений дает мне еще одну ошибку: метод не найден: класс java.util.ArrayList.selectedBook()