当 2 个连续操作导致相同的<from-outcome>结果字符串<from-outcome>(因此相同的页面)时,第二个操作不会响应



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

和与此" 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的设计是否预期的行为?无论哪种方式,是否有解决方法可以进行第二次访问以重新加载页面?

谢谢肖恩

我自己找到答案:在控制器类'onpagePrerender()方法中,刷新整个page_a.jspx(从此URL获取的示例代码:http://adfblogspot.blogspot.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()
}

这将使页面每次重新加载。

相关内容

最新更新