1

複数のラジオボタングループ(動的に生成された)を含むjsfページがあります。バッキングBeanで値を取得する必要がありますが、取得できません。

ビジネス:ユーザーは、コースデーの複数のグループで構成されるコースをサブスクライブしたいと考えています。ユーザーはコース日を選択できます。したがって、コースがたとえば3つの異なるグループに編成された4つのコース日で構成されている場合、ユーザーは3つのブロックで12のコース日から選択できます。

xhtmlページの関連部分:

<c:forEach var="cd1" items="#{coursedayBean.getCoursedays(groupBean.getFirstGroup}">
  <h:selectOneRadio value="#{subscriptionBean.selectedCoursedays[cd1.sequenceNr]}" >
    <f:selectItems value="#{coursedayBean.getCoursedaysSelectItems}"/>
  </h:selectOneRadio>
</c:forEach>

これにより、n個の値を取得するラジオボタンの*mマトリックスが生成されます。selectItemsはタイプ<Long, String>です。

私のバッキングBeanで、私は次のことを宣言しました。

public List<String> getSelectedCoursedays() {
  return selectedCoursedays;
}

public void setSelectedCoursedays(List<String> selectedCoursedays) {
  this.selectedCoursedays = selectedCoursedays;
}

マップ、リストを試してみましたが、どれも機能しませんでした。setSelectedCoursedaysが呼び出されることはありません。バッキングBeanの値を取得するために配列/リスト/マップを宣言するにはどうすればよいですか?

#{subscriptionBean.selectedCoursedays[cd1.sequenceNr]}

トリックをしません。

4

2 に答える 2

0

この構成は問題なく動作するはずです。セッターは実際に呼び出されることはありません。JSF/EL は、メソッドArrayListによってセッター自体を呼び出すだけです。add(index, object)つまり、基本的には:

subscriptionBean.getSelectedCoursedays().add(cd1.sequenceNr, selectedItem);

「うまくいかない」という具体的な問題をどのように観察したのかわかりません。おそらく、あなたは ajax リクエストを起動し、setter メソッドにブレークポイントを置いていて、サーバー ログを読み取っていませんでした。この構成が失敗する 2 つのケースが考えられます。

  1. でを準備しないselectedCoursedaysnew ArrayList()、 が得られPropertyNotFoundException: Target Unreachable, 'selectedCoursedays' returned nullます。

  2. コース日selectedCoursedaysと同数の項目を記入しない場合は、nullArrayIndexOutOfBoundsException

selectedCoursedaysしたがって、次のように準備する必要があります。

@PostConstruct
public void init() {
    selectedCoursedays = new ArrayList<String>();
    for (int i = 0; i < coursedays.size(); i++) {
        selectedCoursedays.add(null);
    }
}

より簡単な代替手段は、それをString[].

private String[] selectedCoursedays;

@PostConstruct
public void init() {
    selectedCoursedays = new String[coursedays.size()];
}
于 2012-12-21T13:32:26.440 に答える
-1

c:forEachとの間の見落としui:repeatです。c:forEachビルドされませんUI component tree nodesまず、ここでそれらの違いを参照する必要があります。

于 2012-12-21T10:25:37.753 に答える