trip.xhtml
次のコードを使用してURLからパラメーターを取得するというページがあります。
<f:metadata>
<f:viewParam name="tripid" value="#{tripBean.tripId}" />
<f:viewParam name="seats" value="#{tripBean.seats}" />
<f:event type="preRenderView" listener="#{tripBean.processParams}" />
</f:metadata>
このTripBean
ように見えます(簡略化):
@ManagedBean
@RequestScoped
public class TripBean implements Serializable {
private static final long serialVersionUID = -4885781058258859229L;
private Long tripId;
private int seats;
// Getters and setters for tripId and seats
trip.xhtml
ページの下部に私は:を持っていh:link
ます
<h:link outcome="/customer/booking.xhtml" value="Book this trip"
includeViewParams="true" />
私が期待しているのは、このリンクをクリックしたときに取得するURLはのようなものだということです"/customer/booking.jsf?tripid=2&seats=1"
。booking.xhtml
これは、次のコードをページに配置した場合にのみ当てはまります。
<f:metadata>
<f:viewParam name="tripid" value="#{tripBean.tripId}" />
<f:viewParam name="seats" value="#{tripBean.seats}" />
</f:metadata>
私が実際に欲しいのは別のBeanを使用することですが。コードを次のように変更します。
<f:metadata>
<f:viewParam name="tripid" value="#{bookingBean.tripId}" />
<f:viewParam name="seats" value="#{bookingBean.seats}" />
</f:metadata>
にBookingBean
も2つのプロパティがtripId
あり、seats
これらはと同じですがTripBean
、リンクをクリックしようとすると、0に設定されているseats-parameterのみが表示されます。("/customer/booking.jsf?seats=0"
)
別のBeanを使用してそれらを格納しようとしているときに、viewparamsを他のページに渡せないように見える理由を誰かが知っていますか?そして、それを別のBeanに格納することが不可能な場合、それらの値をどのように入れることができますTripBean
かBookingBean
?
私が使用した簡単な回避策:を使用せずincludeViewParams="true"
、手動でリンクにパラメーターを追加する(以下を参照)と、問題が「修正」されます。なぜそれがうまくいかないのか疑問に思っていますがincludeViewParams
!
<h:link outcome="/customer/booking.xhtml" value="#{msg['page.trip.booking']}">
<f:param name="tripid" value="#{tripBean.tripId}" />
<f:param name="seats" value="#{tripBean.seats}" />
</h:link>