jsf - 如何在 Liferay JSF portlet 中创建一个弹出默认登录表单/portlet 的链接/按钮?

标签 jsf jsf-2 liferay

Liferay 有一个登录链接,单击该链接可以弹出登录表单/portlet。我想在我的 portlet 中模拟该链接。我试过configuring the login portlet to pop up in a modal dialog ,但它的行为方式与默认登录弹出窗口不同。具体来说,当我登录时,弹出窗口并没有消失(而是弹出窗口本身被重定向到不同的 View )。如何弹出默认登录表单,使其在用户登录时消失。

最佳答案

为了创建与默认登录链接具有完全相同行为的链接,您需要使用Liferay.SignInModal插件。

首先,您需要创建一个指向 /c/portal/login 并包含布局 id 的 h:ouputLink。* 如果 JavaScript 由于某种原因失败,此链接将通过 GET 将用户发送到登录页面并在用户登录后将其重定向回当前页面,从而提供良好的回退行为。

<h:outputLink id="logInLink" binding="#{logInLink}"
    value="/c/portal/login?p_l_id=#{bean.getPlid(request)}">
    <h:outputText value="Log In/Register" />
</h:outputLink>

接下来您需要将登录模式插入该链接:

<h:outputScript>
    AUI().use('liferay-sign-in-modal', 'event-outside', 'transition', function(A) {
        A.one('##{logInLink.clientId}'.replace(/:/g,'\\:'))
            .plug(Liferay.SignInModal);
    });
</h:outputScript>

现在您的登录/登录链接的行为将与默认版本完全相同。用户登录后,弹出窗口应关闭。

* 要获取当前布局 id,请使用如下方法:

public long getPlid(PortletRequest portletRequest) {
    ThemeDisplay themeDisplay =
        (ThemeDisplay) portletRequest.getAttribute(WebKeys.THEME_DISPLAY);
    Layout layout = themeDisplay.getLayout();
    return layout.getPlid();
}

关于jsf - 如何在 Liferay JSF portlet 中创建一个弹出默认登录表单/portlet 的链接/按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50587750/

相关文章:

JSF 过滤器在初始重定向后不重定向

javascript - 为什么 JSF 提供文件扩展名为 .jsf 且 GET 参数 ln=js 的 JavaScript 资源?

html - JSF 2.2 HTML5 传递属性

themes - Liferay 主题 - Velocity - 检查用户是否具有自定义角色

javascript - Portlet 中的YUI 版本冲突问题

jsf - 摘要行在 p :dataTable not working

java - 替换 c :foreach on ui:repeat

java - 具有动态列的数据表

jsf-2 - JSF - JSF 实现如何识别操作?

java - liferay个性化规则