1

ViewA.xhtmlにバインドされたBeanAとViewB.xhtmlにバインドされたBeanBがあると想像してください。BeanAとBeanBは、Beanごとに1つの属性「Objectobj;」を持つバッキングBeanです。ゲッターとセッターで。

今、私はViewAで次のことを行っています。

<ui:repeat value="#{someOtherBean.listOfObjects}" var="objSelected">
    <h:commandLink value="someValue" action="ViewB"> 
        <f:setPropertyActionListener target="#{beanB.obj}" value="#{objSelected}" />
    </h:commandLink>
</ui:repeat>

これはうまくいきます!リストを反復処理すると、(commandLinkを介して)クリックしたオブジェクトがBeanBに設定されます。

問題:GETリクエストを処理する必要があるため、h:linkまたはh:outputLinkを使用する必要があります(ところで、違いはどこにありますか?)。ただし、そうすると、GETリクエストはアクションイベントを発生させないため、f:setPropertyActionListenerコンポーネントを使用できません。

アクションイベントがないため、GETリクエストを使用して、オブジェクトのIDをBeanBにパラメーターとして指定する必要があります。次に、BeanBはdaoを使用して、指定されたIDを持つオブジェクトを取得します。しかし、このサックス。ダオは使いたくない。だから私の特定の質問:

GETリクエストリンクのf:setPropertyActionListenerに相当するものは何ですか?ah:linkまたはh:outputLinkコンポーネントをクリックしたときにBackingBeanのプロパティを設定するにはどうすればよいですか?

解決策があるといいのですが、よろしくお願いします。

4

1 に答える 1

1

リクエストパラメータとして渡します。リクエスト パラメータは文字列のみであるため、最初に文字列に変換する必要があります (または、問題のオブジェクトを一意に識別する最小の部分)。

これにオブジェクトの (データベース) 識別子を使用する例を次に示します。

<ui:repeat value="#{someOtherBean.listOfObjects}" var="objSelected">
    <h:link outcome="ViewB"> 
        <f:param name="id" value="#{objSelected.id}" />
    </h:link>
</ui:repeat>

加えてBeanB

@ManagedProperty("#{param.id}")
private Long id;
private SomeObject objSelected;

@PostConstruct
public void init {
    objSelected = objService.find(id);
}

// ...
于 2011-07-12T08:03:32.073 に答える