2

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

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

我已经使用 AJAX 对此进行了测试,以在 navigationBean 中设置位置,然后按p:commandButton结果pretty:viewview作为 url-mapping id)。这有效,但我想摆脱按钮。

我尝试了以下方法,但遗憾的是方法中的返回字符串不执行导航。

JSF:

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

支持豆:

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>
4

1 回答 1

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);
}
于 2012-09-10T15:20:55.580 回答