使用漂亮面孔导航的动态视图ID拒绝工作

时间:2014-10-10 00:27:01

标签: jsf-2 prettyfaces

我正在尝试将应用程序从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并加载正确地在浏览器中。

我在想我错过了一些明显的东西,因为据我所知,这个问题还没有在其他地方报道过。任何帮助是极大的赞赏。谢谢。 布雷特

1 个答案:

答案 0 :(得分:1)

实际上,我很惊讶从dynaview方法返回的PrettyFaces导航字符串曾经有效。这在任何地方都没有记录,我怀疑这已经过详细测试。所以基本上你是以非常奇怪的方式使用dynaview功能。

所以我建议返回普通的JSF视图ID,这应该可以正常工作。有关详细信息,请参阅文档:

http://ocpsoft.org/docs/prettyfaces/3.3.3/en-US/html/Configuration.html#config.dynaview