2014-10-10 30 views
0

我正在嘗試將應用程序從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

回答

1

其實我很驚訝從Dynaview方法返回PrettyFaces導航字符串曾經工作。這沒有記錄在任何地方,我懷疑這已經過詳細測試。所以基本上你用非常奇怪的方式使用dynaview功能。

所以我建議返回普通的JSF視圖ID,而應該正常工作。請參閱文檔的詳細信息:

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

+0

好的謝謝。真的很有趣,它在JSF 1.2版本中起作用。在我的調試中,它看起來像只有一行代碼停止了這個功能,例如urlMappingForward檢查。它被引入來修復另一個bug(修復#150或類似的東西)。在我看來,這是一個很好的功能。 – Brett 2014-10-16 22:40:37