如何在Java Server Faces 2中维护对象列表

亚历克斯

我有一个JSF2应用程序,该应用程序应该显示一个页面,其中必须在列表中添加多个操作系统项。用户希望通过单个保存操作添加这些项目,设置它们的某些属性,最后将它们永久保存在一起。

该页面应处理的域对象如下所示:

public class Item {
    private long id;
    private String name;
    private Item previous;

    public Item() { }

    public Item(Item previousItem) {
        this.previous = previousItem;
    }

    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public Item getPrevious() {
        return previous;
    }

}

ItemBean类如下所示:

@ManagedBean
public class ItemBean implements Serializable {
    private static final long serialVersionUID = 1L;

    private List<Item> items = new ArrayList<Item>();

    public List<Item> getItems() {
        if(items.size()==0) {
            items.add(new Item()); // adding the first item
        }
        return items;
    }

    public void setItems(List<Item> items) {
        this.items = items;
    }

    public void addItem(Item previousItem) {
        Item newItem = new Item(previousItem);
        items.add(newItem);
    }

    public void save() {
        ...
    }
}

该视图是一个如下所示的xhtml文件:

<?xml version='1.0' encoding='UTF-8' ?>  
<!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:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets">
<body>
<ui:composition template="/templates/layout.xhtml">
<ui:define name="content">
<h2>Items</h2>
<fieldset>
    <legend>Items being added</legend>
    <ui:repeat value="#{itemBean.items}" var="item">
    <div>
        <h:outputLabel value="Item" for="name" />
        <h:inputHidden value="#{item.id}" />
        <h:inputText id="name" value="#{item.name}" />
        <h:commandLink action="#{itemBean.addItem(item)}">Add</h:commandLink>
    </div>
    </ui:repeat>
</fieldset>
<div class="options">
<h:commandButton action="#{itemBean.save}" value="Save"/>
<div class="clear border-bottom"></div>
</div>
</ui:define>
</ui:composition>
</body>
</html>

注意,为了添加新项目,必须发送当前项目以满足业务规则。

问题是我可以毫无问题地添加第二个项目,但是当我单击第二个项目旁边的“添加”链接时,页面将仅显示一个项目,就像在开始时一样。

不幸的是,即使阅读了很多文章,页面和一些书中的章节,我也看不到要使它起作用所缺少的东西。

更新1

我被问到此bean所使用的范围类型。它是默认范围(@RequestScoped)。@SessionScoped为了可伸缩性,我试图避免使用它,但是在这种特殊情况下,我不确定是否可以选择。有更多经验的人可以给我小费吗?

炭疽病

您的范围是ManagedBean什么?

由于您没有发布任何持久性代码,因此我认为itemsList仅在Bean的整个生命周期中都存在。这意味着,如果您的Bean是@ViewScoped@RequestScoped,则在您提交表单后,您的项目将不复存在。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Java Server Faces中处理引导方式?

来自分类Dev

如何在Java Server Faces中处理引导程序模式?

来自分类Dev

从Java Server Faces访问C#对象

来自分类Dev

在Java Server Faces中重置面板网格的更正确方法

来自分类Dev

什么是Liferay Faces及其与JSF的连接(Java Server Faces)

来自分类Dev

使用Hibernate / JPA的Java Server Faces中的数据持久性

来自分类Dev

具有在CSS中定义的自定义字体的Java Server Faces

来自分类Dev

Java如何在值更新时维护数组列表中扫描对象的顺序

来自分类Dev

Java Server Faces:仅在业务逻辑层中进行验证

来自分类Dev

如何在SQL Server中维护每个用户的累积总和

来自分类Dev

如何在使用linq维护对象的原始形式的同时过滤列表中的列表?

来自分类Dev

如何在Java程序中包含mysql-server

来自分类Dev

如何在Java中创建对象列表

来自分类Dev

当您影响相互链接的对象到此列表中时如何维护不可变列表

来自分类Dev

Java EE中web.xml和faces-config.xml的目的是什么?

来自分类Dev

如果faces-config.xml中没有导航用例,如何禁用命令按钮

来自分类Dev

如何从 Prime Faces 6.2 中的数据表中将参数传递给模态窗口?

来自分类Dev

如何配置faces-config.xml

来自分类Dev

Eclipse中的JSF 2.0 Faces Flow支持

来自分类Dev

如何从Java类访问Faces配置的导航用例

来自分类Dev

Android:如何在RecyclerView列表中维护CardViews的视图?

来自分类Dev

如何在WPF中以编程方式维护对象的长宽比

来自分类Dev

如何在json subArray SQL Server中修改特定对象

来自分类Dev

如何在Runat Server ASP中创建对象

来自分类Dev

如何维护Postgres中的列表顺序?

来自分类Dev

如何在Java 8中对对象列表进行分页?

来自分类Dev

如何在Java中访问对象列表元素?

来自分类Dev

如何在 Java 中并行处理对象列表

来自分类Dev

JSF 2.2中的Seam在com.sun.faces.application.NavigationHandlerImpl.determineViewFromActionOutcome处导致java.lang.NullPointerException

Related 相关文章

  1. 1

    如何在Java Server Faces中处理引导方式?

  2. 2

    如何在Java Server Faces中处理引导程序模式?

  3. 3

    从Java Server Faces访问C#对象

  4. 4

    在Java Server Faces中重置面板网格的更正确方法

  5. 5

    什么是Liferay Faces及其与JSF的连接(Java Server Faces)

  6. 6

    使用Hibernate / JPA的Java Server Faces中的数据持久性

  7. 7

    具有在CSS中定义的自定义字体的Java Server Faces

  8. 8

    Java如何在值更新时维护数组列表中扫描对象的顺序

  9. 9

    Java Server Faces:仅在业务逻辑层中进行验证

  10. 10

    如何在SQL Server中维护每个用户的累积总和

  11. 11

    如何在使用linq维护对象的原始形式的同时过滤列表中的列表?

  12. 12

    如何在Java程序中包含mysql-server

  13. 13

    如何在Java中创建对象列表

  14. 14

    当您影响相互链接的对象到此列表中时如何维护不可变列表

  15. 15

    Java EE中web.xml和faces-config.xml的目的是什么?

  16. 16

    如果faces-config.xml中没有导航用例,如何禁用命令按钮

  17. 17

    如何从 Prime Faces 6.2 中的数据表中将参数传递给模态窗口?

  18. 18

    如何配置faces-config.xml

  19. 19

    Eclipse中的JSF 2.0 Faces Flow支持

  20. 20

    如何从Java类访问Faces配置的导航用例

  21. 21

    Android:如何在RecyclerView列表中维护CardViews的视图?

  22. 22

    如何在WPF中以编程方式维护对象的长宽比

  23. 23

    如何在json subArray SQL Server中修改特定对象

  24. 24

    如何在Runat Server ASP中创建对象

  25. 25

    如何维护Postgres中的列表顺序?

  26. 26

    如何在Java 8中对对象列表进行分页?

  27. 27

    如何在Java中访问对象列表元素?

  28. 28

    如何在 Java 中并行处理对象列表

  29. 29

    JSF 2.2中的Seam在com.sun.faces.application.NavigationHandlerImpl.determineViewFromActionOutcome处导致java.lang.NullPointerException

热门标签

归档