当 2 个连续的操作导致相同的 <from-outcome>outcomestring<from-outcome>,因此是同一个页面,第二个没有响应
when 2 consecutive actions lead to the same <from-outcome>outcomestring<from-outcome>, hence same page, the second one doesn't respond
我在 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的控制器class中,第二次访问被认为是"postBack",因为"isPostBack()"在onPagePreRender()returns真的。这似乎是第二次 page_a.jspx 根本没有重新加载的原因(如果重新加载,一些文本将被第二次更新)。为了验证这一点,我在第二次点击后简单地刷新了相同的 page_a.jspx,并且 page_a.jspx 更新了预期的文本。
所以我的问题是,这是 ADF 设计的预期行为吗?无论哪种方式,是否有解决方法来让第二次访问重新加载页面?
谢谢,
肖恩
自己找答案:在控制器class的onPagePreRender()方法中,刷新整个page_a.jspx(示例代码取自url: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;
}
控制器class:
public void onPagePreRender() {
super.onPagePreRender();
// do you data update then call refreshPage_action()
}
这会强制页面每次都重新加载。
我在 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的控制器class中,第二次访问被认为是"postBack",因为"isPostBack()"在onPagePreRender()returns真的。这似乎是第二次 page_a.jspx 根本没有重新加载的原因(如果重新加载,一些文本将被第二次更新)。为了验证这一点,我在第二次点击后简单地刷新了相同的 page_a.jspx,并且 page_a.jspx 更新了预期的文本。
所以我的问题是,这是 ADF 设计的预期行为吗?无论哪种方式,是否有解决方法来让第二次访问重新加载页面?
谢谢, 肖恩
自己找答案:在控制器class的onPagePreRender()方法中,刷新整个page_a.jspx(示例代码取自url: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;
}
控制器class:
public void onPagePreRender() {
super.onPagePreRender();
// do you data update then call refreshPage_action()
}
这会强制页面每次都重新加载。