我有一个页面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
,但是当我现在尝试单击链接时,我只看到一个设置为 0 的席位参数。seats
TripBean
"/customer/booking.jsf?seats=0"
有谁知道为什么当我尝试使用另一个 bean 来存储它们时,我似乎无法将视图参数传递到另一个页面?如果无法将其存储在另一个 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>