selectOneMenu上的PrettyFaces导航更改

时间:2012-09-10 15:00:05

标签: jsf-2 primefaces prettyfaces

我有一个使用PrettyFaces和PrimeFaces的应用程序。使用网址格式/#{ location : navigationBean.location }/#{ year : navigationBean.year }访问一个页面。

在该页面上,我有p:selectOneMenu包含可能的位置值。如果我更改此菜单,我希望在同一年和新位置刷新页面。

我使用AJAX测试了这一点,在navigationBean中设置了位置,然后按p:commandButton结果pretty:viewview是url-mapping id)。这有效,但我想摆脱按钮。

我尝试了以下内容,但遗憾的是方法中的返回String不执行导航。

JSF:

<p:selectOneMenu value="#{navigationBean.location}">
    <p:ajax listener="#{navigationBean.navigate}"/>
    <f:selectItems value="#{locationBean.locations}"/>
</p:selectOneMenu>

支持bean:

public String navigate(AjaxBehaviorEvent event)
{
    return (location != null) ? "pretty:view" : null;
}

PrettyFaces配置:

<url-mapping id="view">
    <pattern value="/#{ location : navigationBean.location }/#{ /\\d{4}/ year : navigationBean.year }/"/>
    <view-id value="/view.xhtml"/>
</url-mapping>

1 个答案:

答案 0 :(得分:2)

您无法从(ajax)动作侦听器返回导航结果。您只能从<h:commandButton action>中使用的实际操作方法返回它。

改为使用NavigationHandler#handleNavigation()

public void navigate() {
    FacesContext context = FacesContext.getCurrentInstance();
    context.getApplication().getNavigationHandler()
        .handleNavigation(context, null, (location != null) ? "pretty:view" : null);
}