根据 Phillip Riand(参见:关于 openNTF的讨论)的说法,这是不可能的……他们需要知道设计元素才能找出签名的人。因此,它仅在 SSJS 中可用。
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中,当我需要打开数据库/文档作为签名者时,我只是在参数中使用了会话。有时解决方案是如此简单:-)
/约翰
我知道有两种方法可以在 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 对象将不可用(“未定义”)。
这是一个很老的帖子,我只是偶然发现的。尝试了上面提到的一些解决方案:
resolveVariable
对我不起作用,至少不是sessionAsSigner
因为这会引发运行时错误(session
不过,我可以解决普通的旧问题......)老实说,我不太了解 Controller.verify(sessionAsSigner) 方法;控制器是 XAgent 特有的东西吗?如果是这样,我这里没有 XAgent,所以不能使用它
不想在这里导入额外的 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);
也许也能帮助别人