我有一个使用PrettyFaces和PrimeFaces的应用程序。使用网址格式/#{ location : navigationBean.location }/#{ year : navigationBean.year }
访问一个页面。
在该页面上,我有p:selectOneMenu
包含可能的位置值。如果我更改此菜单,我希望在同一年和新位置刷新页面。
我使用AJAX测试了这一点,在navigationBean中设置了位置,然后按p:commandButton
结果pretty:view
(view
是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>
答案 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);
}