2

根据 Phillip Riand(参见:关于 openNTF的讨论)的说法,这是不可能的……他们需要知道设计元素才能找出签名的人。因此,它仅在 SSJS 中可用。

4

3 回答 3

4

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

我将 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中,当我需要打开数据库/文档作为签名者时,我只是在参数中使用了会话。有时解决方案是如此简单:-)

/约翰

于 2012-07-09T19:33:39.330 回答
4

我知道有两种方法可以在 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 对象将不可用(“未定义”)。

于 2012-07-11T16:50:23.290 回答
0

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

  1. resolveVariable对我不起作用,至少不是sessionAsSigner因为这会引发运行时错误(session不过,我可以解决普通的旧问题......)

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

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

所以我想出了另一个看起来很简单的解决方案:

在我的 javaBean 中创建了一个将会话对象作为参数的方法;由于 sessionAsSigner 与 session 属于同一类,因此我不必导入新的东西。

Java代码是:

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);

也许也能帮助别人

于 2015-09-04T11:57:30.227 回答