根据Phillip Riand(参见:discussion on openNTF),这是不可能的......他们需要知道设计元素,以找出谁签了它。因此,它仅适用于SSJS。
答案 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)
这是一篇很老的帖子,我偶然发现了。尝试了上面提到的一些解决方案:
resolveVariable
对我不起作用,至少不适用于sessionAsSigner
,因为这会引发运行时错误(我可以解析普通的旧session
,但是......)< / p>
老实说我并不太了解Controller.verify(sessionAsSigner)方法;控制器是XAgents特有的东西吗?如果是这样,我在这里没有XAgent,所以不能使用它
不想在这里导入额外的ExtLib类......
所以我提出了另一个看似非常简单的解决方案:
在我的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);
也许可以帮助别人