1

これが多くのテキストのように見えることはわかっていますが、私が見逃しているのは非常に単純な概念だと思います。

Facelets を使用して Web アプリケーションを作成しています。カスタム タグ rq:request-list を取得しました。このタグは、リクエストのリストをパラメーターとして取り、それらを表示する素敵なテーブルを出力します。ここまでは順調ですね。

rq:request-list は、期待どおりに始まります。

<!-- ... -->
<ice:dataTable value="#{list}" var="req">
    <ice:column>
        <f:facet name="header">Date last edited</f:facet>
        <ice:outputText value="#{req.dateModified}" />
    </ice:column>
<!-- ... -->

そして、それはうまくいきます。テーブルには、リクエストを編集するためのリンクもあります。ヤッピー!

<ice:column rendered="#{spokespersonView}">
    <f:facet name="header">Edit</f:facet>
    <h:commandLink value="Edit" action="edit_r" rendered="#{RequestSessionBean.mutable}">
        <f:setPropertyActionListener target="#{RequestSessionBean.request}" value="#{req}"/>
    </h:commandLink>
</ice:column>

バッキング Bean のリクエストを、現在のテーブル行で表されるリクエストに設定した後、編集ページに移動します。これが問題の場所です。そして微妙です。

rq:request-list は 1 ページで複数回使用されます。そのような:

<ui:repeat value="#{ExperimentListBean.usersExperiments}" var="exp">
    <rq:request-list list="#{RequestListBean.requestsByExperiment[exp]}" showExperiment="false" spokespersonView="true" />
</ui:repeat>

これで、テーブルは正常に表示されます。つまり、すべてのテキストが正しいです。ただし、commandLinks は間違った Requests を指しています...ページの最後のrq:request-list の対応する行の Request を指しています。リクエストに関連するデータはテーブルにあるはずのように出力されますが、{req} は commandLink をクリックすると間違ったリクエストを指します。

繰り返しになりますが、ページにいくつかの rq:request-list がある場合、すべてのrq:request-list の最初の行の [編集] リンクは、ページの最後の rq:request-list の最初の要求 (行) を指しています。 . rq:request-listの 2 行目の Edit リンクは、ページの最後の rq:request-list の 2 番目の要求 (行) を指しています。等。

時代遅れのリストのインデックスだけでなく、{req} が以前の自分を指すようにするにはどうすればよいでしょうか?

ありがとう!

4

1 に答える 1

1

このブログ エントリを見てください。おそらく、レンダリング時に評価される foreach の代わりに、コンポーネント ツリーの構築時に 1 回実行される repeat を使用します。(しかし、これは暗闇の中でのショットにすぎません。私はあなたの例を試していません)

于 2009-07-16T14:15:30.323 に答える