我正在尝试将应用程序从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>
我有网址请求:http://example.com/myapp/sites/object/309847 此请求成功匹配url映射ID“seSite”,并在seViewChooserBean上调用getSiteViewId并返回结果“pretty: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";
}
}
然后尝试转发到新视图id seSiteProps,但新生成的URL不会被漂亮的脸处理,因为(来自日志):“请求未使用PrettyFaces映射。继续。”
所以我得到了网址http :: //example.com/myapp/sites/object/309847/properties的404响应。
请注意,此网址匹配以查看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直接放在浏览器中,页面IS由prettyfaces处理,isUrlMappingForward(req)返回true并加载正确地在浏览器中。
我在想我错过了一些明显的东西,因为据我所知,这个问题还没有在其他地方报道过。任何帮助是极大的赞赏。谢谢。 布雷特
答案 0 :(得分:1)
实际上,我很惊讶从dynaview方法返回的PrettyFaces导航字符串曾经有效。这在任何地方都没有记录,我怀疑这已经过详细测试。所以基本上你是以非常奇怪的方式使用dynaview功能。
所以我建议返回普通的JSF视图ID,这应该可以正常工作。有关详细信息,请参阅文档:
http://ocpsoft.org/docs/prettyfaces/3.3.3/en-US/html/Configuration.html#config.dynaview