注意
我有ServletFilter
,用于检查用户是否已使用<url-pattern>
进行了记录。如果用户未登录,则重定向到login.xhtml
。
我的问题
用户登录后,我的程序始终重定向dashboard.xml
(基于navigation-rule
)。我想自动重定向last visited page
。你能提供可行的方法吗?
目前我的解决方案适用于
但是,我不乐意使用它。 Seam
支持吗?你能提供更好的方法吗?
在我的ServletFilter
中,我保留上次访问过的页面,如下所示
AuthenticationFilter.java
httpSession.setAttribute(Constants.ORIGINAL_VIEW_KEY, requestPath);
在我的LoginBean
中,在用户登录后重定向上次访问的页面。
LoginBean.java
ELContext elContext = facesContext.getELContext();
Application application = facesContext.getApplication();
ExpressionFactory eFactory = application.getExpressionFactory();
ValueExpression binding = eFactory.createValueExpression(elContext, "#{" + Constants.VISIT_KEY_SCOPE + Constants.VISIT_KEY + "}", Visit.class);
binding.setValue(elContext, visit);
ValueExpression originalViewBinding = eFactory.createValueExpression(elContext, "#{" + Constants.ORIGINAL_VIEW_SCOPE + Constants.ORIGINAL_VIEW_KEY + "}", String.class);
String originalViewId = (String) originalViewBinding.getValue(elContext); <--- last visited view id.
UIViewRoot viewRoot = application.getViewHandler().createView(facesContext, originalViewId) ;
facesContext.setViewRoot(viewRoot);
facesContext.renderResponse();
答案 0 :(得分:0)
从login.page.xml中删除以下内容
<navigation from-action="#{identity.login}">
<rule if="#{identity.loggedIn}">
<redirect view-id="/view/dashboard.xhtml"/>
</rule>
答案 1 :(得分:0)
如果使用Identity
和Credentials
,则页面会在记录后自动重定向上次访问的页面(访问页面,使用需要登录)。我们必须在component.xml
中进行配置,如下所示。
component.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<components ----->
<event type="org.jboss.seam.security.loginSuccessful">
<action execute="#{redirect.returnToCapturedView}"/>
</event>
</components>