我有一个简单的应用程序,一个类和一个xPage,一个computedField,绑定到该类。我想将类getter的结果显示为bean。不行。 我的班级看起来像这样:
package test.test;
public class Test {
public Test() {
}
public String getTest() {
return "Test";
}
}
在computedField中的SSJS:
var test = new test.test.Test();
return test.getTest();
错误是这样的:
Error while executing JavaScript computed expression
Script interpreter error, line=1, col=17: 'test' is undefined
1: var test = new test.test.Test();
我错过了任何设置或什么? 在此先感谢JiKra
编辑:如果我使用托管bean,问题绝对相同。我的Designer / Eclipse IDE一定有问题。我会尝试重新安装tomorow。
EDIT2:今天,我试着在我大学的计算机上做同样的事情,这也是同样的错误。所以,问题不在于我的IDE。我肯定错过了什么。我是否需要在服务器或IDE中安装任何外部库?
答案 0 :(得分:2)
好的,我做了以下事情。
1)创建了一个新的Java类。
2)将以下代码放入类中。
package test.test;
public class Test implements java.io.Serializable {
public Test() {
super();
}
public String getTest() {
return "Test";
}
}
3)使用以下来源创建了XPage:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex">
<xp:text escape="true" id="computedField1">
<xp:this.value><![CDATA[#{javascript:var t:test.test.Test = new test.test.Test();
return t.getTest();
}]]></xp:this.value>
</xp:text>
</xp:view>
在浏览器中打开它,出现“Test”字样。
将变量“t”更改为“test”然后失败。所以似乎变量名称就是问题。
<强> [编辑] 强>
根据您对使用8.5.2的评论,代码/ Java功能直到Notes / Domino 8.5.3才到达。这就是为什么它不适合你。
答案 1 :(得分:1)
SSJS(测试)中的变量名称与包名称冲突。使用
var test1=new test.test.Test();
它会起作用......
答案 2 :(得分:1)
可能构建问题。确保你......
1)构建代码,尝试清理和构建。
2)拥有正确的构建路径 - 您可以在首选项对话框中找到它。
3)可以找到Test.class文件,最好是在Java透视图的Navigator视图中。
答案 3 :(得分:1)
确保在更改软件包名称后构建Java和XPage。例如,向SSJS添加print("new XPage")
,向Java添加System.out.println("new Java")
。
我可以使用您的代码和8.5.3FP3 Designer + Server重现该问题。当我将包名更改为 test.tes 时,问题就会消失。
编辑:我一直使用变量名“t”,如果我将变量名称更改为“test”,可以确认问题出现也,如Simon在下面找到的那样。也许Simon有一个不同的Desiger / Domino版本,因为test.test.Test
对我来说不适用于变量名“t”。
EDIT2:听起来像是在使用带有8.5.2服务器的8.5.3 Designer。正如Simon所说,Code / Java是在8.5.3中引入的。例如,可以在此处找到编写Java for 8.5.2的说明:http://xpageswiki.com/web/youatnotes/wiki-xpages.nsf/dx/Work_with_Java
答案 4 :(得分:0)
在SSJS中初始化Java类时,代码应如下所示:
var testObj:test.test.Test = new test.test.Test();
答案 5 :(得分:0)
你忘了把新陈述。
var test = new test.test.Test();
答案 6 :(得分:0)
不确定这是否是问题,但我认为你必须在Bean中定义一个String类型的变量“test”,以便使用getTest()检索它的值。