xpages 应用程序布局登录节点:登录后如何保持在同一页面上?

xpages application layout login node: way to stay on the same page once logged in?

我有一个使用应用程序布局的应用程序。登录节点已添加到实用程序链接中的应用程序布局 (xe:loginTreeNode)。

控件可以工作,但是当用户登录时,他被重定向到应用程序的主页。有没有办法登录并停留在当前页面?

我能想到的唯一方法是使用 cookie 来记住他们在按下登录按钮之前所在的页面。您不能使用任何作用域变量或托管 bean,因为它们会在您注销时丢失。

然后在您的登录页面中,检查 cookie 的值并重定向到该页面,否则如果 cookie 为空,则将他们带到主页。您可以使用客户端 JS 编写和读取 cookie。


由于您没有使用自定义登录表单,另一个想法是改用基本节点。基本节点有一个客户端 onClick 事件。在这里你可以放类似这样的代码:

var currentPage = [code to obtain the current page];
location.href="/yourFolder/yourDatabase.nsf?logout&redirectTo=/yourFolder/yourDatabase.nsf/currentPage";

我不太相信这会奏效,但值得一试。

实施xe:loginTreeNode

@Override
public String getHref() {
    String href = super.getHref();
    if(StringUtil.isNotEmpty(href)) {
        return href;
    }
    boolean logged = isLoggedIn();
    String command = "";
    FacesContext ctx = FacesContext.getCurrentInstance();

    if(logged && StringUtil.equals(ctx.getExternalContext().getAuthType(), "Domino")) //$NON-NLS-1$
    {
        command = "?logout"; // $NON-NLS-1$
    }
    else
    {
        command = /*logged ? "/?logout" :*/ "/?opendatabase&login"; // $NON-NLS-1$
    }
    href = ctx.getExternalContext().getRequestContextPath() + command;
    return href;
}

简单地说:如果您不希望它重定向,只需使用 basicTreeNode,取任何 URL 并在其后附加“?login”。