当2个连续的动作导致相同的<from-outcome> outcometring <from-outcome>,因此相同的页面,第二个动作没有响应

时间:2017-02-17 17:52:04

标签: oracle-adf jdeveloper

我在12C JDEV中面临这个奇怪的问题:

我在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>

和与此关联的页面&#34; mystring&#34;是page_a.jspx。

当点击2个菜单时,哪些操作都会导致上述&#34; mystring&#34;,因此page_a.jspx,第二个菜单似乎根本没有响应。在调试时,它显示在与page_a.jspx关联的控制器类中,第二次访问被视为&#34; postBack&#34;因为&#34; isPostBack()&#34;在onPagePreRender()中返回true。这似乎是第二次没有重新加载page_a.jspx的原因(如果重新加载,某些文本将第二次更新)。为了验证这一点,我在第二次点击后只刷新了相同的page_a.jspx,并且page_a.jspx已经更新了预期的文本。

所以我的问题是,这是ADF设计的预期行为吗?无论哪种方式,是否有一种解决方法可以让第二次访问重新加载页面?

谢谢, 肖恩

1 个答案:

答案 0 :(得分:0)

自己找一个答案:在控制器课程中&#39; onPagePreRender()方法,刷新整个page_a.jspx(从这个网址获取的示例代码:http://adfblogspot.blogspot.ca/2012/06/how-to-reload-whole-jsfjspx-page-from.html):

$stateChangeStart

控制器类:

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;  
 }

这会强制每次重新加载页面。