Navigation based on a method's return value is only performed by components implementing ActionSource2
interface and providing an attribute taking a MethodExpression
for that, such as action
attribute of UICommand
components, which is queued during Apply Request Values phase and invoked during Invoke Application phase.
The <f:event listener>
is merely a component system event listener method, not an action method. You need to perform the navigation manually as follows:
public void performWeakLogin() {
// ...
FacesContext fc = FacesContext.getCurrentInstance();
fc.getApplication().getNavigationHandler().handleNavigation(fc, null, "mainPortal");
}
Alternatively, you can also send a redirect on a given URL, which is more useful for the case you don't want to navigate internally, but externally:
public void performWeakLogin() throws IOException {
// ...
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
ec.redirect(ec.getRequestContextPath() + "/stdPortal/stdPages/mainPortal.xhtml");
}
Unrelated to the concrete problem, a servlet filter is a better place for the job of performing request based authorization/authentication.