我们目前在使用JSF2的portlet环境中面临一个问题。
应用程序正在为实际用户会话创建动态门户页面...将其视为Eclipse编辑器视图,用户可以在其中编辑实体。所以现在我打电话给动态视图编辑: - )
我们现在面临的问题是:用户导航到编辑器并处理portlet。每个portlet中显示的视图当然会随时间而变化。现在他想看看另一个在另一个编辑器中显示的实体。 但是当他导航回第一个编辑器时,portlet的状态会变回默认视图。
在portlet-world中,每个portlet每个portlet获取它应该通过存储在PortletSession中的参数显示的视图,我也可以轻松地更改该参数。我知道这个参数引起了麻烦,因为当更改编辑器时,portlet将始终检查此参数以决定显示哪个视图。
request.getPortletSession().setAttribute("com.ibm.faces.portlet.page.view", "/MyPage.xhtml");
我的想法是,以某种方式为每个JSF导航添加一个回调,它将把这个参数设置为导航将要显示的视图(可能包括view-params)。 是否可以进行标准回调?如果没有,是否可以在将设置此参数的导航规则中执行某种EL?
答案 0 :(得分:1)
以某种方式为每个JSF导航添加回调
您可以使用自定义ConfigurableNavigationHandler
执行作业。这是一个启动示例:
public class MyNavigationHandler extends ConfigurableNavigationHandler {
private NavigationHandler parent;
public MyNavigationHandler(NavigationHandler parent) {
this.parent = parent;
}
@Override
public void handleNavigation(FacesContext context, String from, String outcome) {
// TODO: Do your job here.
// Keep the following line untouched. This will perform the actual navigation.
parent.handleNavigation(context, from, outcome);
}
@Override
public NavigationCase getNavigationCase(FacesContext context, String fromAction, String outcome) {
return (parent instanceof ConfigurableNavigationHandler)
? ((ConfigurableNavigationHandler) parent).getNavigationCase(context, fromAction, outcome)
: null;
}
@Override
public Map<String, Set<NavigationCase>> getNavigationCases() {
return (parent instanceof ConfigurableNavigationHandler)
? ((ConfigurableNavigationHandler) parent).getNavigationCases()
: null;
}
}
要使其运行,请在faces-config.xml
:
<application>
<navigation-handler>com.example.MyNavigationHandler</navigation-handler>
</application>