1

URL パラメーターとして単純な ID を持つページがあります。ここで行うことは、基本的に反復する必要がある関連エンティティの数を返すためのクエリを実行することです: LEAGUE ゲーム、CUP ゲーム、および PLAYOFFS ゲームについてゲームのスケジュールを返す必要があるため、結果リストはゲームごとに異なる必要があります。反復。

これらの各スケジュールは、GUI で独自のタブを取得します。RichFaces タブにはすでに JSTL c:forEach が必要なので、別の WHERE 制限をコンポーネント (ここでは Seam EntityQuery サブクラス インスタンス) に設定する方法を見つけるだけで十分です。

ここでの問題は、反復中に現在のエンティティを使用して各クエリをどのようにパラメーター化するかということです。Seam/JBoss EL ではどのように行うのが最適ですか? 反復中に EntityQuery インスタンスに別の制限を 1 つまたは 2 つ取得するにはどうすればよいですか?

私が使用するJSFコードは次のとおりです。

<rich:tabPanel>
  <c:forEach items="#{participationListQuery.resultList}" var="pa">
    <rich:tab label="#{...}" switchType="client">
      <h:form>
      <rich:dataTable id="schedule-scores"
                      value="#{rosterScheduleQuery.resultList}"
                      var="sgl"
                      width="100%"
                      rows="20">
        ...
      </rich:dataTable>
      </h:form>
    </rich:tab>
  </c:forEach>
</rich:tabPanel>

ここでの問題は、c:forEach のようなものを単純に呼び出すことができないことです#{rosterScheduleQuery.setCustomRestriction(pa.group.round.subCompetition.competition.name)}。これは、この式が 1 回しか評価されないためです (私が正しく理解している場合)。これはすべてかなり手続き的なものなので、ここで全体的なポイントを見逃している可能性があります。

通常、反復および実行時にパラメータ化されたクエリ (追加の WHERE 条件) をどのように解決しますか? ベスト プラクティスはいつでも歓迎します。

ありがとう

編集:私はすでに Facelets を使用していますが、rich:tabPanel では JSTL c:forEach を使用する必要があります。http://relation.to/11633.laceを参照してください。

4

2 に答える 2

0

JSPハンドラーとJSFハンドラーの両方を混在させることはお勧めできません。switchType equal To clientを使用しています。これは、そのコンテンツがクライアントに事前にレンダリングされ、切り替え中にサーバーとの対話が発生しないことを意味します。

まあ、それは最善の解決策ではありませんが、私はそれがあなたを助けることができると思います

<rich:tabPanel value="#{participationTabPanel}">
</rich:tabPanel>

あなたは豆を管理しました

@Name
public class ParticipationManagedForm {

    private @In EntityQuery<Participation> participationListQuery;

    @Factory(value="participationTabPanel", scope=ScopeType.EVENT)
    public HtmlTabPanel getParticipationTabPanel() {
        HtmlTabPanel panel = new HtmlTabPanel();

        for(List<Participation> participationList: participationListQuery.getResultList()) {
            HtmlTab htmlTab = new HtmlTab();

            // Set up htmlTab right here

            panel.getChildren().add(htmlTab);
        }

        return panel;
    }

}
于 2011-07-01T14:14:22.177 に答える
0

JBossEL はパラメーターを使用したメソッド呼び出しを許可するため、タイプを取得して結果を取得するメソッドを持つ中間 Bean を追加できます。基本的に「#{rosterScheduleQuery.resultList}」を「#{someNewBean.getResults(pa)}」に置き換えます。この Bean にはクエリが注入され、必要に応じてパラメータ化できます。おそらくあなたが望むほどエレガントではありませんが、これが私のやり方だと思います。

于 2011-06-28T00:26:01.943 に答える