В JSF и Java EE у меня есть ArrayList
, я заполняю этот ArrayList
объектом, который я создаю на основе пользовательского ввода. Пользователь просто имеет простую форму, которая позволяет им заполнять некоторые значения, нажимать кнопку, чтобы она добавилась в таблицу.Постоянная постоянная переменная JSF
Он добавляется в таблицу с целью иметь цикл for, который выполняет итерацию по всем значениям, которые добавляет пользователь.
Проблема заключается в том, что после добавления значения страница перезагружается, чтобы добавить значение. Но когда он перезагружает внутреннее значение ArrayList
, теряется, поэтому в следующий раз, когда они что-то добавляют, есть еще одно (последнее) значение.
Вот некоторые общие иллюстрирующим удобство:
public class Car {
private String model;
private String brand;
private String year;
// Getters and setters
}
@ManagedBean(name = "Car")
public class CarMaker {
ArrayList<Car> carList = new ArrayList<Car>();
// There are values we pass directly from browser
private String localModel;
private String localBrand;
private String localYear;
// Getters and setters
public void generateCars() {
// Generate XML external elements
for (int i = 0; i < carList.length; i++) {
// Generate XML internal elements
}
// Finish up XML
}
public Car carFill() {
Car tempCar = new Car();
tempCar.setModel(getLocalModel());
tempCar.setBrand(getLocalBrand());
tempCar.setYear(getLocalYear());
return tempCar;
}
public void addToTable() {
carList.add(carFill());
}
}
А вот кнопка, и таблица:
<p:commandButton value="+" id="Add" actionListener="#{Car.addToTable()}"
ajax="false" update="growl" styleClass="ui-priority-primary" />
<!-- Table start -->
<p:dataTable var="car" value="#{Car.carList}">
<p:column headerText="Model">
<h:outputText value="#{car.model}" />
</p:column>
<p:column headerText="Brand">
<h:outputText value="#{car.brand}" />
</p:column>
<p:column headerText="Year">
<h:outputText value="#{car.year}" />
</p:column>
</p:dataTable>
<!-- Table end -->
код сам по себе работает. Он добавляется, все работает. Однако мне нужно знать, как добавить «постоянство» к переменной ArrayList
, так что даже после мини-обновления, которое происходит из-за нажатия кнопки +, старая информация, добавленная пользователем, все еще существует.
У меня было сокрушительное подозрение, что это было бы очень простое решение. Я буду проверять и давать правильный ответ, если это так. Не могли бы вы расширить свой ответ, чтобы объяснить, почему «@ ViewScoped» - правильный подход к решению и т. Д. В основном для людей, которые находят это через Google. – Erick
Я подтвердил, что это работает (View Scoped) Спасибо за изменение с добавленной информацией. Я буду отмечать это как правильный ответ. Спокойной ночи – Erick