我在拥有货币列表的母版页模板上有一个<p:selectOneMenu>
。我还有<p:slider>
来搜索不同产品的价格范围。
在设置范围后按下<p:commandButton>
时,页面将重定向到另一个页面,该页面将根据范围显示产品列表。
在此之后,如果尝试如上所述更改货币,我想重定向到主页。
以下XHTML和相应的托管bean,根据<p:slider>
中选定的范围显示产品列表。
<ui:define name="metaData">
<f:metadata>
<f:viewParam name="minPrice" value="#{productPriceManagedBean.minPrice}" maxlength="20"/>
<f:viewParam name="maxPrice" value="#{productPriceManagedBean.maxPrice}" maxlength="20"/>
<f:viewAction action="#{productPriceManagedBean.viewAction}"/>
</f:metadata>
</ui:define>
@ManagedBean
@ViewScoped
public final class ProductPriceManagedBean implements Serializable
{
private BigDecimal minPrice; //Getter and setter.
private BigDecimal maxPrice; //Getter and setter.
private boolean valueChanged;
private static final long serialVersionUID = 1L;
public ProductPriceManagedBean() {}
//This method is called, when a currency held by <p:selectOneMenu> is changed.
public void currencyChanged(AjaxBehaviorEvent event) throws IOException {
this.valueChanged=true;
}
public void viewAction()
{
if(valueChanged) //valueChange is always false here.
{
ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
context.redirect(context.getRequestContextPath()+"/public_resources/Product.jsf");
}
}
}
如果在主模板上的<p:selectOneMenu>
中更改了某种货币,则会调用currencyChanged()
方法,将valueChanged
的值设置为true,但viewAction()
中不可用方法。
似乎在调用 viewAction()
方法之前很早就调用了currencyChanged()
方法。
解决这种情况的方法是什么?
无论如何,如果在显示根据范围滑块的产品列表后,主页模板上的货币已更改,我需要重定向到主页。
我不会在这里多余地显示XHTML代码。
就像<p:ajax listener="#{productPriceManagedBean.currencyChanged}"/>
内的<p:selectOneMenu>
一样。