1

我有以下结构:

列表视图.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
}

编辑视图.xhtml

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

编辑Bean.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 作为请求参数传递。开始了:

列表视图.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>

编辑Bean.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);
    }
}
4

2 回答 2

0

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

还要看这个问题: passing-data-between-managed-components-in-jsf

于 2012-11-20T11:49:25.607 回答
0

一般的想法可能是:

传递id该实体的一个并稍后通过该 id 获取一个实体...

您还可以使用转换器并在其中将该 id转换为实体...

像这样 :

<h:inputText value="#{editBean.selectedEntity.name}" converter="myEntityConverter"/>
于 2012-11-20T11:37:47.110 回答