1

私は次の構造を持っています:

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

ダニエルのおかげで、エンティティが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);
    }
}
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 に答える