私は現在JSF2.0に深く関わっていて、あるビューから別のビューへのマネージドBeanプロパティの「トランスポート」について少し理解が不足しています。少し調べてみましたが、良い例が見つからなかったので、チュートリアルを教えてもらえたり、少し説明してもらえたら本当にありがたいです。
これが私のシナリオです:
私は小さな遊び場カレンダーアプリケーションを開発しています。最初のビューselect.xhtml
には、ユーザーが特定の日付を選択できるカレンダーセレクターが含まれています。
<html>
...
<h:form>
<!-- Calendar selector from primefaces -->
<p:calendar value="#{calendarSelect.date}" mode="inline" navigator="true" />
<p:commandButton value="Show entries for date" action="day" />
...
対応するバッキングBeanは次のようになります。
@ManagedBean(name="calendarSelect")
@RequestScoped
public class CalendarSelectComponent {
private Date date = null;
... // Getters and setters
からフォームを送信すると、select.xhtml
に転送されますday.xhtml
<html>
...
<h:form>
The current day ist:
<h:outputText value="#{calendarEdit.date}">
<f:convertDateTime pattern="dd.MM.yyyy" />
</h:outputText>
バッキングBeanは次のようになります。
@ManagedBean(name="calendarEdit")
@ViewScoped
public class CalendarEditComponent implements Serializable {
private Date date = null;
private CalendarEntryBean currentEntry = null;
private List<CalendarEntryBean> allEntries = null;
....
私は今問題を解決しようとしています:セレクターからエディターdate
にパラメーターを転送するにはどうすればよいですか?
私はいくつかのオプションを試しましたが、そのうちの1つは次のとおりです。
<p:commandButton value="Show entries for date" action="day" />
<f:setPropertyActionListener target="#{calendarEdit.date}" value="#{calendarSelect.date}" />
</p:commandButton>
デバッガーは、実際、のdate
プロパティにcalendarEdit
からの値が入力されていることを示していますcalendarSelect
が、day.xhtml
は新しいビューであるためCalendarEditComponent
、ビューのセレクターからの日付を入力したものではなく、新しいバッキングBeanが作成されていselect
ます。
私は、1つの解決策は、SessionScoped
すべての値を保持するバッキングBeanを作成することであることを読みました。しかし、これは私が想定している方法ではありません。セッション内の情報は実際には必要ないため、AからBに「移動」したいだけです。セッションベースのアプローチのもう1つの欠点は、次のことができることです。セッションごとに1つのセレクターと1つのエディターのみを使用します。これは、マルチウィンドウブラウジングなどを考える場合は受け入れられないと思います。
私は本当にそのようなシナリオに遭遇した最初の人ではないと思います。JSFがこれに対してエレガントなソリューションを提供すると確信していますが、そのソリューションを見つけることができませんでした。
繰り返しになりますが、誰かがこれにアプローチする方法を知っているなら、私は聞いています!;-)