我正在嘗試將應用程序從JSF 1.2遷移到JSF 2.1。下面的代碼在1.2中工作。 我使用PrettyFaces 3.3.3,MyFaces 2.1。使用漂亮的面孔導航的動態視圖ID拒絕工作
在相當-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」 和getSiteViewId上調用seViewChooserBean並返回結果「相當: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,因爲(從日誌)的美男子後:「請求未使用PrettyFaces映射,繼續。」
因此,我得到了URL http :: //example.com/myapp/sites/object/309847/properties的404響應。
請注意,此網址匹配查看ID seSiteProps。
我已經調試這成漂亮的臉篩選,發現了以下內容:
爲http://example.com/myapp/sites/object/309847初始請求後,DynaviewEngine.processDynaView被調用,併產生正確的目標URL的http :: //示例.com/sites/object/309847/properties並通過faces請求轉發。然後,用PrettyFilter.doFilter()中的斷點,我觀察到以下內容: PrettyFilter.doFilter()方法中:isUrlMappingForward(req)返回false,因此請求不會被美觀處理。爲什麼??
// 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)返回處理真實,它在瀏覽器中正確加載。
我在想我錯過了一些很明顯的東西,因爲問題還沒有在其他地方報道過,據我所知。任何幫助是極大的讚賞。謝謝。 Brett
好的謝謝。真的很有趣,它在JSF 1.2版本中起作用。在我的調試中,它看起來像只有一行代碼停止了這個功能,例如urlMappingForward檢查。它被引入來修復另一個bug(修復#150或類似的東西)。在我看來,這是一個很好的功能。 – Brett 2014-10-16 22:40:37