在viewAction中识别p:selectOneMenu的值更改

时间:2014-04-12 20:13:04

标签: jsf primefaces jsf-2.2

我在拥有货币列表的母版页模板上有一个<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>一样。

0 个答案:

没有答案