我正试图将一个应用程序从JSF 1.2迁移到JSF 2.1。下面的代码在1.2中起作用。我使用的是PrettyFaces 3.3.3,MyFaces 2.1。
在pretty-config.xml中:
<url-mapping id="seSite">
<pattern value="/sites/#{seViewChooserBean.urlSiteType}/#{seViewChooserBean.siteId}"/>
<view-id value="#{seViewChooserBean.getSiteViewId}"/>
</url-mapping>
<url-mapping id="seSiteProps">
<pattern value="/sites/#{sePropsBean.urlSiteType}/#{sePropsBean.siteId}/properties"/>
<view-id value="/pages/se/site/props.xhtml"/>
<action>#{sePropsBean.init}</action>
</url-mapping>
我有一个URL为的请求:http://example.com/myapp/sites/object/309847此请求成功匹配url映射id"seSite",并在seViewChooserBean上调用getSiteViewId,并返回结果"漂亮:seSiteProps"。我已经调试并确认了这一点。这是ViewChooserBean.java的bean代码,供您参考
public String getSiteViewId() {
if (siteType == SiteType.TYPE) {
// redirect to tag list view
initSiteBean("seTagListBean", TagListBean.class);
return "pretty:seTagList";
}
else {
// redirect to site properties view
initSiteBean("sePropsBean", PropertiesBean.class);
return "pretty:seSiteProps";
}
}
之后,prettyfaces尝试转发到新的视图id seSiteProps,但新生成的URL没有被prettyface处理,因为(从日志中):"请求没有使用prettyfaces.继续。"
因此,我收到了URL http://example.com/myapp/sites/object/309847/properties的404响应。
请注意,此url与视图id seSiteProps匹配。
我已经将其调试到漂亮面孔过滤器中,并发现了以下内容:
在最初请求http://example.com/myapp/sites/object/309847,DynaviewEngine.processDynaView被调用并生成正确的目标url http://example.com/sites/object/309847/properties,并通过faces请求转发。
然后,在PrettyFilter.doFilter()中使用断点,我观察到以下内容:在PrettyFilter.doFilter()方法中:isUrlMappingForward(req)返回false,因此请求不由prettyfaces处理。为什么?
// isUrlMappingForward returns false. The request has url http:://example.com/myapp/sites/object/309847/properties on it.
if (!isUrlMappingForward(req))
{
mapping = getConfig().getMappingForUrl(url);
}
此外,请注意,如果我将请求http://example.com/myapp/sites/object/309847/properties直接放在浏览器中,则由prettyfaces和isUrlMappingForward(req)处理的页面将返回true,并在浏览器中正确加载。
我想我错过了一些显而易见的东西,因为据我所知,其他地方还没有报道这个问题。非常感谢您的帮助。谢谢Brett
事实上,我非常惊讶从dynaview方法返回PrettyFaces导航字符串是否有效。这在任何地方都没有记录,我怀疑这是否经过了详细的测试。所以基本上你是在以一种非常奇怪的方式使用动态视图功能。
因此,我建议返回普通的JSF视图ID,这应该可以正常工作。有关详细信息,请参阅文档:
http://ocpsoft.org/docs/prettyfaces/3.3.3/en-US/html/Configuration.html#config.dynaview