【问题标题】:JSF Internal Variable PersistenceJSF 内部变量持久性
【发布时间】:2014-11-11 08:53:57
【问题描述】:

在 JSF 和 Java EE 中,我有一个 ArrayList,我用我根据用户输入创建的对象填充这个 ArrayList。用户只有一个简单的表单,允许他们填写一些值,单击一个按钮将其添加到表中。

它被添加到一个表中的目的是有一个循环遍历用户添加的所有值。

问题在于,一旦添加了值,页面就会重新加载以添加值。但是当它重新加载时,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 变量,以便即使在由于按下 + 按钮而发生的小刷新之后,用户添加的旧信息还在。

【问题讨论】:

    标签: java jsf jakarta-ee primefaces managed-bean


    【解决方案1】:

    @ViewScoped 注释添加到您的CarMaker 托管bean。

    您可能还必须在 CarCarMaker 类中实现 java.io.Serializable

    This article 的传奇BalusC 解释了 JSF2 支持的不同作用域的使用。

    【讨论】:

    • 我非常怀疑这将是一个非常简单的解决方案。如果是,我会测试并给出正确答案。您能否扩展您的答案以解释为什么 @ViewScoped 是解决方案的正确方法等...主要是针对通过 Google 找到此问题的人。
    • 我已确认此作品有效(查看范围)感谢您添加信息的编辑。我会将此标记为正确答案。晚安
    猜你喜欢
    • 1970-01-01
    • 2014-02-05
    • 2013-03-13
    • 2010-11-12
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多