0

以下は私のコードです:

<ui:repeat var="status" value="#{showUpdatedAction.statusUpdates}">
    <h:panelGroup>
    #{status.content}
        <h:form> 
           <h:commandLink value="Like" action="#{statusAction.likeStatus(status.id,1)}" />
        </h:form>
  </h:panelGroup>
<ui:repeat>

#{status.content}正しい値を示します。を使用してステータスのIDを出力すると#{status.id}、正しい値も得られます。しかし、コマンド リンクをクリックすると、status.id に渡される値は常に 0 です。

なぜこれが起こるのか、どうすればこれを回避できるのか教えてもらえますか?

ありがとうございました。

編集 1

興味深いことに、関数でパラメーターを渡す代わりに、を使用して渡すと<f:param>、完全に機能します。誰もそれについてコメントできますか?

4

3 に答える 3

0

JSFページのコードは問題なく、チェックしただけです...(私の側でもBeanを生成しました:showUpdatedAction、statusAction、および単純なクラスStatus)

public void likeStatus(String id,long someVal){
    System.out.println(id+"___"+someVal);
}

IDをうまく出力します

id1___1

id4___1

たぶん、それはidのタイプと関係があるのでしょうか、それともBeanと関係があるのでしょうか。

于 2012-01-13T11:07:11.803 に答える
0

正確には言えませんが、なぜあなたの場合は0なのか、EL式でオブジェクトstatus.id全体を直接渡すことができます。statusそのようです:

<h:commandAction value="Like" action="#{statusAction.likeStatus(status)}" />

次に、あなたlikeStatusは単にint statusId = status.getId()または同様のことをし、あなたはあなたが望むものを持っています。

追加として:使用<c:forEach>は実際には単なるフォールバックである必要があります。理由は何であれ、JSTLとJSFを混在させるべきではないと人々が言うからです。

于 2012-01-13T08:14:23.103 に答える
0

<c:forEach>の代わりに使ってみるといいと思います<ui:repeat>

于 2012-01-13T07:40:24.007 に答える