2012-08-08 192 views
0

我正在嘗試從XPage調用一些java代碼,並試圖通過SSJS執行此操作。試圖獲得一個基本的Hello World例子。理想情況下,來自java代碼的返回可能被塞進一個變量。XPages - SSJS調用bean

目標:(XPAGE內容)

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"> 
    <xp:label value="#{javascript:helloWorld.anyoneThere}" id="label1"></xp:label> 
</xp:view> 

將打印 '呦!'當頁面加載時。相反,我得到一個運行時錯誤,找不到helloWorld。

創建一個包

package testBean; 

public class helloWorld { 
    public String anyoneThere(){ 
     return "Yo!"; 
    } 
} 

然後我修改的面孔-config文件

<?xml version="1.0" encoding="UTF-8"?> 
<faces-config> 
    <managed-bean> 
     <managed-bean-name>helloWorld</managed-bean-name> 
     <managed-bean-class>testBean</managed-bean-class> 
     <managed-bean-scope>application</managed-bean-scope> 
    </managed-bean> 
</faces-config> 

不知道我需要做初始化/調用java功能。我見過的一些例子是掛鉤到視圖中,或者是在事件上,但是我正在做的事情的預期代碼更可能在beforePageLoad節中運行。

+2

這兩個答案有一個指針,讓您的樣品的工作。我想建議你也遵循標準的Java命名標準,並用大寫字母開始你的類名,例如你好,世界。此外,讓您的類可序列化(「公共類HelloWorld實現Serializable」),這是bean的需求。 – 2012-08-09 08:05:47

回答

6

您的託管bean類也包含類名。

<managed-bean-class>testBean.helloWorld</managed-bean-class> 

而且您的標籤必須有括號

<xp:label value="#{javascript:helloWorld.anyoneThere();}" id="label1"></xp:label> 
+0

嗨託比,我嘗試了兩種方式,但不知道是否應該添加,作爲另一條線的面孔,或者如果我本來只是修改現有的。無論新錯誤是否爲[ReferenceError]'helloWorld'都未找到。這是我試圖包裹我的頭 - 如何初始化和訪問這些新的對象/豆。 – anotherBob 2012-08-09 15:35:57

+0

它應該替換原來的行。一旦它發生變化,它應該能夠找到helloWorld。我想說你想要做的另一件事就是在Designer中從菜單轉到Project - > Build Project。這將確保類被編譯。 – 2012-08-09 15:51:39

+0

我在prod和dev服務器上打開了相同的項目,並且Package Explorer視圖切換了順序。所以我把這個bean放在了prod服務器上,而XPage在dev服務器上,而不是dev上的所有內容。 CRUD!由於我仍然需要進行所列出的所有更改,因此我可以使用您的提示來處理它。感謝Toby的幫助! – anotherBob 2012-08-09 16:46:30

2

我已經寫了small tutorial on the basics of creating and using a simple managed bean with XPages

本教程還演示如何將getter和setter添加到變量,以便您可以使用EL引用它們。因此,在你的榜樣,你將能夠做到以下幾點引用anyoneThere變量(假設你已經爲它設置一個getter和setter):

<xp:label value="#{helloWorld.anyoneThere}" id="label1"></xp:label> 
+1

這是一個關鍵點。如果一個Java類不是一組通過getter和setter公開的屬性,它實際上不是一個bean ......它是一個POJO(Plain Old Java Object)。 Java bean是符合getter/setter慣例的Java類,正如Mark所提到的,它實現了Serializable接口。 – 2012-08-09 08:34:45

+0

嗨Per,你的教程是我在初學時找到的第一個項目之一。本教程沒有示例來調用#{helloWorld.someVariable}之外的helloWorld項目,並且當我試圖完成上面列出的內容時,它從不向頁面返回任何內容。我試圖硬編碼返回(所以那裏有東西),但它仍然是空白的。 @TimTripcony - 我以前有過它們,但爲了簡單起見,這個例子就是爲了這個例子。我將確保遵循關於真實例子的慣例。感謝您的提醒。 – anotherBob 2012-08-09 15:32:45