如何在从XPage调用的Java Bean中使用SessionAsSigner?

时间:2012-07-09 19:33:39

标签: javabeans xpages xpages-ssjs

根据Phillip Riand(参见:discussion on openNTF),这是不可能的......他们需要知道设计元素,以找出谁签了它。因此,它仅适用于SSJS。

3 个答案:

答案 0 :(得分:3)

我发现解决方案就在眼前: - )

我将XPage(在此示例中为XAgent)更改为:

<xp:view xmlns:xp="http://www.ibm.com/xsp/core" rendered="false">

This is an xAgent returning json data...

<xp:this.afterRenderResponse><![CDATA[#{javascript:Controller.verify(sessionAsSigner)}]]></xp:this.afterRenderResponse>

并且在bean中我只需要在参数中使用会话,当我需要打开数据库/文档作为签名者时。有时解决方案很简单: - )

/约翰

答案 1 :(得分:3)

我知道有两种方法可以在Java bean中使用 sessionAsSigner 对象:

1通过解析sessionAsSigner对象:

FacesContext context = FacesContext.getCurrentInstance();
Session sessionAsSigner = context.getApplication().getVariableResolver().
        resolveVariable(context, "sessionAsSigner");

2使用扩展库中 com.ibm.xsp.extlib.util.ExtLibUtil 类的 getCurrentSessionAsSigner()函数。

为了能够使用它(在Java和SSJS中),您需要确保所有设计元素都由相同的用户ID签名。如果不是这种情况,则sessionAsSigner对象将不可用('undefined')。

答案 2 :(得分:0)

这是一篇很老的帖子,我偶然发现了。尝试了上面提到的一些解决方案:

  1. resolveVariable对我不起作用,至少不适用于sessionAsSigner,因为这会引发运行时错误(我可以解析普通的旧session,但是......)< / p>

  2. 老实说我并不太了解Controller.verify(sessionAsSigner)方法;控制器是XAgents特有的东西吗?如果是这样,我在这里没有XAgent,所以不能使用它

  3. 不想在这里导入额外的ExtLib类......

  4. 所以我提出了另一个看似非常简单的解决方案:

    在我的javaBean中创建了一个方法,该方法将会话对象作为参数;因为sessionAsSigner属于与会话相同的类,所以我不必导入新内容。

    Javacode是:

    public void testSession(Session s) throws Exception{
            System.out.println(" > test effective user for this session = " 
                 + s.getEffectiveUserName());
    }
    

    这是从SSJS调用的

    mybean.testSession(session);
    

    myBean.testSession(sessionAsSigner);
    

    也许可以帮助别人