我访问此website以学习在xpages中使用postscript。我按照示例运行代码并运行属性。
然后我开始尝试其他方式。我使用一个使用@DbLookup的计算字段和一个使用view.postScript在新窗口中打开xpage的按钮。当@DbLookup返回值时,该值将是view.postScipt中的参数。
当我运行代码时,它返回错误,表示Java方法' postScript(数组)'在java类' com.ibm.xsp.component.UIViewRootEx2'找不到
我对这个错误感到困惑,因为它提到它是java错误而我在xpage中没有java代码。
我认为我得到错误的原因是计算字段返回多个值。
但是,如果我硬编码值,它运行正常
var myparam = "Test,Test2,Test3";
或者
var myparam = "Test"+"Test2"+"Test3";
请找到您要查看的代码。(包括导致错误的代码,我的尝试和错误消息)
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:br></xp:br>
<xp:text escape="true" id="computedField1">
<xp:this.value><![CDATA[#{javascript:
//use @DbLookup to find value, that value will be the parameter in postScript
var value = @DbLookup(@DbName(), "myView", keyword, 3);
return value;
}]]></xp:this.value>
</xp:text>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:button value="Label" id="button1">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:
var myparam = getComponent("computedField1").getValue();//does not work
//var myparam = "Test,Test2,Test3"; //works
//var myparam = "Test"+"Test2"+"Test3"; //works
//var myparam = "Test"; //(original) works
var myurl = @LeftBack(context.getUrl(),"/") + "/testpostscript.xsp?id="+myparam;
//error occurs in this code
//Java method 'postScript(Array)' on java class 'com.ibm.xsp.component.UIViewRootEx2' not found
view.postScript("window.open('" + myurl + "')");}]]></xp:this.action>
</xp:eventHandler></xp:button>
<xp:br></xp:br>
<xp:br></xp:br>
</xp:view>
我读了这个post,这似乎与我的问题不同。
当我搜索&#34; postScript(数组)xpages&#34;在互联网上,我找不到有关它的更多信息。
所以我的问题是当参数包含多个值时如何让view.postScript运行?
请感谢您的建议。谢谢。
答案 0 :(得分:3)
你是对的,你的@DbLookup的结果会返回多个值(一个数组)。这就是为什么你看到postScript(Array)是一个未知方法的底层Java错误的原因。 postScript方法需要String作为输入。
我建议您使用@Implode()来加入@DbLookup的结果:
<xp:button value="Label" id="button1">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action>
<![CDATA[#{javascript:
var myparam = @Implode(getComponent("computedField1").getValue(); ",")
var myurl = @LeftBack(context.getUrl(),"/") + "/testpostscript.xsp?id="+myparam;
view.postScript("window.open('" + myurl + "')");}]]>
</xp:this.action>
</xp:eventHandler>
</xp:button>