2017-02-17 13 views
0

我在12C的jdev面對這個奇怪的問題作出迴應:當連續2個行動導致相同<從-結果> outcomestring <從-結果>,因此同一頁,第二個不

我有adfc-config.xml中的這種定義:

<view id="mystring"> 
    <page>page_a.jspx</page> 
    <view-id>page_a.jspx</view-id> 
    <redirect/> 
    </view> 
<control-flow-case> 
    <from-outcome>mystring</from-outcome> 
    <to-activity-id>mystring</to-activity-id> 
</control-flow-case> 

並且與此「mystring」關聯的頁面是page_a.jspx。

當點擊2個菜單時,哪個操作導致上面的「mystring」,因此page_a.jspx,第二個菜單似乎根本沒有響應。調試時,它顯示在與page_a.jspx關聯的控制器類中,第二次訪問被視爲「postBack」,因爲onPagePreRender()中的「isPostBack()」返回true。這似乎是第二次page_a.jspx根本沒有被重新加載的原因(如果重新加載,一些文本將被第二次更新)。爲了驗證這一點,我在第二次點擊後簡單地刷新了相同的page_a.jspx,並且page_a.jspx更新了預期的文本。

所以我的問題是,這是預期的行爲還是不是由ADF的設計?無論哪種方式,是否有解決方法來第二次訪問重新加載頁面?

感謝, 肖恩

回答

0

只要找到一個答案自己:在控制類onPagePreRender()方法,刷新整個page_a.jspx(此網址所採取樣本代碼:http://adfblogspot.blogspot.ca/2012/06/how-to-reload-whole-jsfjspx-page-from.html):

public String refreshPage_action() { 
    FacesContext fctx = FacesContext.getCurrentInstance(); 
    String pageToRefresh = fctx.getViewRoot().getViewId(); //getting View Id of current page 
    ViewHandler viewHandler = fctx.getApplication().getViewHandler();  
    UIViewRoot viewRoot = viewHandler.createView(fctx, pageToRefresh); //ViewRoot for current page 
    viewRoot.setViewId(pageToRefresh); 
    fctx.setViewRoot(viewRoot);  //set the viewroot in facesContext to reload 
    return null; 
} 

控制器類:

public void onPagePreRender() { 
    super.onPagePreRender(); 
// do you data update then call refreshPage_action() 
} 

這股力量的頁面重新加載每次。

相關問題