我的 index.xhtml JSF 首页上有一个下拉菜单。相关的代码/命令按钮如下所示:
<h:selectOneMenu id="nodes" value="#{MyBacking.chosenNode}">
<f:selectItems value="#{MyBacking.nodes}" />
</h:selectOneMenu>
<a4j:commandButton value="Retrieve" styleClass="ctrlBtn"
id="retrieveBtn" style="margin-bottom: 2px;"
onclick="#{rich:component('nodeLoadWait')}.show()" # modal
action="#{MyBacking.redirect}"
image="/img/btnRetrieve26.png" />
action
之前设置为“你好”,在我的faces-context.xml
:
<navigation-rule>
<from-view-id>/index.xhtml</from-view-id>
<navigation-case>
<from-outcome>hello</from-outcome>
<to-view-id>/nodeMgmt.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
当action
设置为“你好”时,单击retrieve
按钮工作正常,因为面将处理导航,MyBacking.setChosenNode
方法将分配所有必要的数据,以便 nodeMgmt.xhtml 的内容将显示为完全填充。
但是,如果用户点击导致的初始活动retrieve
超时,即使 bean 检测到超时,网页也会挂起,我想将用户重定向到“超时”页面。
为了处理返回超时消息的支持 bean(在应用程序“内部”时已经存在错误检测),我认为与其使用faces-context.xml
文件,不如在内部处理它。
我发现 FacesContext.getCurrentInstance().getExternalContext().redirect 但 JSF 1.2 javadoc 没有此功能。也许是因为它没有特色?它重定向虽然这令人困惑。为什么没有关于这种方法的文档?
尽管如此,它会将我重定向到页面,但在呈现时没有考虑 bean 在初始请求期间实例化的数据。该 bean 当前处于请求范围内。bean中的相关代码是
try {
FacesContext.getCurrentInstance().getExternalContext().redirect("nodeMgmt.jsf");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
使用后端 java 调用是进行这种重定向的最佳方式吗?如果没有,最好使用faces-context.xml
?如果是这样,怎么做?当我们在这里时 - 任何人都可以将我引导到 FacesContext.getCurrentInstance().getExternalContext() 用法的良好阅读资源,其中有关于如何使用数据进行简单导航的不错示例,因为我无法找到一个。
干杯