2

RichFaces とリンクのリストの作成に問題があります。リスト内で任意のタイプの commandLink を使用しようとすると (私は ui:repeat と rich:list を試しました)、そのリンクに対するアクションは呼び出されません。また、commandButton とそれらの a4j バリエーションも試しました。Jboss 6でJSF 2、RichFaces 4を使用しています。

<rich:list var="venue" value="#{searchManager.results}" type="definitions" stateVar="status">
  <h:form>
    <h:commandLink value="CLICK IT" immediate="true" action="#{score.selectVenue}" />
  </h:form>
</rich:list>

フォームの位置も問題ありません。

<h:form>
   <rich:list var="venue" value="#{searchManager.results}" type="definitions" stateVar="status">
       <h:commandLink value="CLICK IT" immediate="true" action="#{score.selectVenue}" />
   </rich:list>
</h:form>

リンクだけを持っている場合 (リストなし) は機能します。

どんな助けでも大歓迎です。

4

1 に答える 1

1

コマンド リンクをクリックするかコマンド ボタンを押してフォームを送信すると、JSF はリクエスト値の適用フェーズでコンポーネント ツリーをスキャンして問題のコマンド リンク/ボタンを探し、それに関連付けられているアクション式を見つけます。あなたの場合#{score.selectVenue}

ただし、これに到達できるようにするに#{searchManager.results}は、フォームが表示されたときとまったく同じリストを返すようにする必要があります。結果リストが空の場合、フォーム送信のリクエスト値の適用段階では、ビューにコマンド リンク/ボタンがまったく表示されないためです。

あなたの#{searchManager}Bean はリクエストスコープのようです。リクエスト スコープ Bean の有効期間は、リクエストとレスポンスの 1 サイクルだけです。そのため、フォームを送信すると、フォームが表示されたときとは異なる、まったく新しいリクエスト スコープ Bean のインスタンスが取得されます。このresultsプロパティは、Bean の (後) 構築中に保持されないように見えるため、空のままです。そのため、JSF は問題のコマンド リンク/ボタンを見つけることができないため、それに関連付けられたアクション式を見つけることができず、それを呼び出すことができません。

JSF2 を使用しているため、Bean をビュー スコープに配置することで簡単に修正できます。nullこのようにして、Bean は、return メソッドまたはvoidin action メソッドによってまったく同じビューに送信および移動している限り存続します。

@ManagedBean
@ViewScoped
public class SearchManager {
    // ...
}

以下も参照してください。

于 2011-07-27T14:29:40.970 に答える