【发布时间】:2012-07-09 19:33:38
【问题描述】:
根据 Phillip Riand(参见:discussion on openNTF)的说法,这是不可能的……他们需要知道设计元素才能找出签名的人。因此,它仅在 SSJS 中可用。
【问题讨论】:
标签: javabeans xpages xpages-ssjs
根据 Phillip Riand(参见:discussion on openNTF)的说法,这是不可能的……他们需要知道设计元素才能找出签名的人。因此,它仅在 SSJS 中可用。
【问题讨论】:
标签: javabeans xpages xpages-ssjs
我知道有两种方法可以在 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')。
【讨论】:
我发现解决方案就在眼前 :-)
我将我的 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 中,当我需要以签名者身份打开数据库/文档时,我只是在参数中使用了会话。有时解决方案是如此简单:-)
/约翰
【讨论】:
这是我偶然发现的一篇相当老的帖子。尝试了上面提到的一些解决方案:
resolveVariable 对我不起作用,至少对sessionAsSigner 不起作用,因为这会引发运行时错误(不过,我可以解决普通的旧 session...)
说实话,我不太了解 Controller.verify(sessionAsSigner) 方法;控制器是 XAgent 特有的东西吗?如果是这样,我这里没有 XAgent,所以不能使用它
不想在这里导入额外的 ExtLib 类...
于是我想出了另一个看起来很简单的解决方案:
在我的 javaBean 中创建了一个将会话对象作为参数的方法;因为 sessionAsSigner 与 session 属于同一类,所以我不必导入新的东西。
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);
也许也能帮助别人
【讨论】: