我有以下结构:
列表视图.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);
}
}