1

JSPページをJSF(JSPコードは許可されていません)に変換しようとしていますが、問題が発生しました。注:これはアカデミックであるため、「ダーティ」なソリューションでは機能しません。

さまざまな条件に応じて画像のソースと代替テキストを設定するjspコードがあります。連結とスイッチ条件があります。これはループの内側です。

これで、次のように、すべての値を通過するループを再現できます。

  <ui:repeat value="#{gameapi.game.fieldsList}" var="field">                                          
     <h:graphicImage id="field#{field.fieldNr}" styleClass="field#{field.fieldNr}" 
                                                            url="..." alt="" title=""/>                                          
  </ui:repeat>

ただし、画像のURLと代替テキストには合計20を超える組み合わせがあります。明らかに、条件付きでレンダリングまたは選択されたgraphicImageタグをあらゆる可能性に対して作成することは、すべての追加の組み合わせでのみ醜くなるため、エレガントなソリューションではないかと思います。また、基になるJavaコードでこれらの文字列を作成することはできません。これは、ビュー、モデル、およびコントローラーを分離するという考えに違反するためです。

では、これを行うための最良の解決策は何ですか?JSFの大きな弱点のようです。

4

1 に答える 1

1

MVVMパターンのバリエーションを使用することを検討してください。ビジネスロジックのマネージドBeanとは別に、ビューロジック専用のマネージドBeanを使用できます。

<ui:repeat value="#{bizBean.list}" var="_row">
  <h:graphicImage
    url="#{viewModelBean.images[_row.outcome]}"
    alt="#{viewModelBean.alts[_row.outcome]}"
    title="#{viewModelBean.titles[_row.outcome]}" />
</ui:repeat>

viewModelBean多数のマッププロパティを持つアプリケーションスコープのタイプである可能性があります。これは比較的単純なケースを想定していますが、このパターンはより高度な要件に適しています。

注:繰り返し制御はNamingContainerである必要があるため、VDLでクライアント識別子を設定しようとするのは冗長です。詳細については、こちらをご覧ください。

于 2012-05-05T19:54:09.370 に答える