如何将实体从一个jsf视图传输到另一个jsf视图?

时间:2012-11-20 11:20:45

标签: java jsf views managed-bean scopes

我有以下结构:

listView.xhtml

<h:dataTable value="#{listBean.myList} ...>
  //for every row I create a commandLink
  <h:commandLink action="editView" value="edit" />
</h:dataTable>

ListBean.java

@ManagedBean
@ViewScoped
public class ListBean{
   public List<Entity> myList; // also getters and setters
}

editView.xhtml

<h:inputText value="#{editBean.selectedEntity.name}" />

EditBean.java

@ManagedBean
@ViewScoped
public class EditBean{
   public Entity selectedEntity; // also getters and setters
}

您知道这样的问题:如何将所选实体从listView传输到editView?我认为这应该很简单,但经过一整天,我没有得到它。

我尝试了不同的内容,例如 @ManagedProperty <f:param name="" value=""> ,但我没有帮助我。 所以,请告诉我这是多么简单和美好:)

提前致谢!


更新 - 解决方案#1

感谢Daniel, 一种可行的方法是,当实体由EntityManager持有时,您可以通过其id访问实体。因此,您将id作为请求参数传递。我们走了:

listView.xhtml

<h:dataTable value="#{listBean.myList} ...>
  //for every row I create a commandLink, so you can click on that entity to edit it
  <h:commandLink action="editView" value="edit">
     <f:param name="selectedEntityId" value="#{entity.id}" />
  </h:commandLink>
</h:dataTable>

EditBean.java

@ManagedBean
@ViewScoped
public class EditBean{

    private Entity selectedEntity;

    @PostConstruct
    public void init() {
        Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
        long selectedEntityId = Long.parseLong(params.get("selectedEntityId"));

        selectedEntity = SomeEntityManagerUtil.getEntity(selectedEntityId);
    }
}

2 个答案:

答案 0 :(得分:0)

一般的想法可能是:

要传递该实体的id并稍后通过该ID获取实体...

您也可以使用转换器并在其中该ID转换为实体...

像这样:

<h:inputText value="#{editBean.selectedEntity.name}" converter="myEntityConverter"/>

答案 1 :(得分:0)

如果你的bean具有相同的范围,也许你应该合并它们? 您也可以使用上下文: jsf-get-managed-bean-by-name

另请看这个问题: passing-data-between-managed-components-in-jsf