xpages:用户登录时是否可以进行陷阱?

时间:2015-02-06 16:00:24

标签: xpages xpages-ssjs

我正在编写一个应用程序,最终用户可以将文档标记为他的收藏夹。我已经有了必要的表格和视图来保存和回读收藏夹,但我有一个小问题:所有都在后端完成(收藏夹从视图中显示,而不是作用域变量)并且似乎有一个单击"添加到收藏夹"之间的同步问题链接和重新加载收藏夹的部分刷新:新添加的文档仅在第二次刷新后显示。没问题,然后我决定将我最喜欢的托管bean中的收藏夹移动到我保留语言和其他用户的首选项的会话中。

我现在面临的问题是:如何捕获登录事件以便我可以在bean中构建收藏夹列表?我看了" xInvolve"控件的最喜欢的部分是构建的,我发现有一些代码添加到自定义控件的beforePageLoad事件中。但是,如果有更好的方法,我会徘徊。如果我这样做,这意味着每次页面加载时,它都将进入我的会话bean,看它是否需要构建收藏夹列表。我觉得它有点过载:当用户登录时,我宁愿构建一次列表。

这是可能的还是我应该像现在一样保留beforePageLoad代码?任何想法/想法都表示赞赏。

3 个答案:

答案 0 :(得分:1)

请注意,这实际上并没有捕获登录信息。我不确定该怎么做但我不确定它是否需要...

在这里大声思考......但我会尝试这个......

假设您有一个“UserObject”来保存用户的收藏夹..然后对象被加载,它会在等等中读取它们...

“App Bean”怎么样..应用程序范围内的托管bean ...基本上是你的应用程序的工厂...在AppBean中你有一个Map ...所以这是一个简单的方法来获取userobject随时随地存在于整个应用范围内...... 现在在每个页面上..你试图抓住UserObject ...如果它不存在..你将它加载到App Bean中,以便以后...如果它存在..它已经加载...然后在用户添加/删除收藏夹时更新UserObject ...确保通过app bean中的对象以保持更新...

这样做的一个优点是,如果用户打开另一个浏览器或标签页...它全部来自AppBean ......

给出一些想法,如果你需要任何帮助,请告诉我......

另请注意:这是一个java解决方案......虽然它可能在SSJS中可行..

答案 1 :(得分:0)

标准登录页面仅限HTTP,而不是XPage。 HTTP标识需要登录,验证凭据,检查您重定向到的URL,然后XPage运行时才接管。

如果要捕获登录,则需要让XPage发出AJAX请求才能登录。

您可能想看一下OpenNTF上的XPages帮助应用程序。我建立了一个favouriting功能。收藏夹存储在人员的个人资料中,但是在会话期间保存在地图中的内存中。使用用户名的散列值创建人物的个人资料。重命名存在潜在问题,但这不是一个重要问题。

答案 2 :(得分:0)

您可以使用 SessionListener 。在 sessionCreated 方法中,您可以计算List并初始化会话范围的bean:

public class MySessionListener implements SessionListener {

    public void sessionCreated(ApplicationEx arg0, HttpSessionEvent event) {
        FavBean bean = new FavBean();

        // create the favorites List
        // and push it to your bean 

        // add the bean to session scope
        event.getSession().setAttribute("favBean", bean);

    }

    public void sessionDestroyed(ApplicationEx arg0, HttpSessionEvent event) {}

}