Java 如何将实体从一个jsf视图传输到另一个jsf视图?
我的结构如下: listView.xhtmlJava 如何将实体从一个jsf视图传输到另一个jsf视图?,java,jsf,views,managed-bean,scopes,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> <h:inputText value="#{editBean.selectedEntity.name}" /
<h:dataTable value="#{listBean.myList} ...>
//for every row I create a commandLink
<h:commandLink action="editView" value="edit" />
</h:dataTable>
<h:inputText value="#{editBean.selectedEntity.name}" />
<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>
您知道这个问题:如何将所选实体从listView传输到editView?这应该很简单,我想,但一整天之后,我没有得到它的工作
我尝试了不同的东西,比如@ManagedProperty
和
,但我没有帮助我。
所以,请告诉我这是多么简单和美好:)
提前谢谢
更新-解决方案#1 多亏了丹尼尔, 一种可行的方法是,当实体由EntityManager持有时,您可以通过其id访问该实体。因此,您可以将该id作为请求参数传递。我们开始: listView.xhtml
<h:dataTable value="#{listBean.myList} ...>
//for every row I create a commandLink
<h:commandLink action="editView" value="edit" />
</h:dataTable>
<h:inputText value="#{editBean.selectedEntity.name}" />
<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>
总体思路可以是:
要传递该实体的id
,然后通过该id获取实体
您还可以使用转换器,并在其中将id转换为实体
像这样:
<h:inputText value="#{editBean.selectedEntity.name}" converter="myEntityConverter"/>
如果bean具有相同的作用域,您是否应该合并它们?
您也可以使用上下文:
再看看这个问题:
ups,我纠正了帖子中的错误。但问题是RequestParameterMap.get(“paramName”)只返回字符串,而不返回实体对象。然后传递id
并通过该id
获取实体,或者使用转换器
并在其内部将id
转换为实体……这样做很有效!谢谢我将更新我的问题以提供解决方案。不过,我认为有一个更简单的解决办法;)我认为如果从listView导航到editView,视图已经改变,因此@ViewScoped bean被清除(这是正确的吗?)。难道没有一种通过RequestScope发送bean的方法吗?因为这只是一个请求…还是不是?