您可以根据您的条件使用视图名称作为操作方法的返回值,以便 JSF 将呈现与您的返回值名称匹配的视图。
可以使用 java 代码或在 faces-config.xml 中声明您的流程来处理您的工作流
对于 java 示例:(动态导航)
public String yourActionMethod(){
if(condition1){
return "view1";
}else if(condition2){
return "view2";
}else if(conditionN){
return "viewN";
}
}
对于 XML 示例:(静态导航)
<navigation-rule>
<from-view-id>/index.xhtml</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/welcome.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>failure</from-outcome>
<to-view-id>/failed.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
对于您的用例动态导航(使用 java 代码)很好。
如果你想根据服务器端条件显示对话框,你可以这样使用:
public void doSomething(ActionEvent actionEvent) {
RequestContext context = RequestContext.getCurrentInstance();
context.execute("dialogVar.show()");
}
如果您的用例更复杂并且您有复杂的工作流程,请尝试使用 Activiti 并从中获取输出作为您的 ViewId,然后在您的操作方法中返回,以便 JSF 将它们呈现。
您还可以编写自己的状态机并获取它的输出并将其作为您的 ViewId 在您的操作方法中返回。