我有以下结构:
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);
}
}
答案 0 :(得分:0)
一般的想法可能是:
要传递该实体的id
并稍后通过该ID获取实体...
您也可以使用转换器并在其中将该ID转换为实体...
像这样:<h:inputText value="#{editBean.selectedEntity.name}" converter="myEntityConverter"/>
答案 1 :(得分:0)
如果你的bean具有相同的范围,也许你应该合并它们? 您也可以使用上下文: jsf-get-managed-bean-by-name