【问题标题】:XPages - SSJS calling a beanXPages - SSJS 调用 bean
【发布时间】:2012-08-08 22:43:00
【问题描述】:

我正在尝试从 XPage 调用一些 java 代码,并试图通过 SSJS 执行此操作。只是试图让一个基本的 hello world 示例工作。理想情况下,Java 代码的返回值可以填充到变量中。

目标:(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!";
    }
}

然后我修改了 faces-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 部分中运行。

【问题讨论】:

  • 两个答案都有使您的示例正常工作的指针。我想建议也遵循标准的 Java 命名标准,并以大写字母开头你的类名,例如你好世界。此外,使您的类可序列化(“公共类 HelloWorld 实现可序列化”),这是 bean 的要求。

标签: xpages xpages-ssjs


【解决方案1】:

您的 managed-bean-class 也包含类名。

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

你的标签也必须有括号

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

【讨论】:

  • 嗨,托比,我尝试了两种方法,但不确定是否应该将其作为另一条线添加到面部,或者是否应该只修改现有的。不管新错误是 [ReferenceError] 'helloWorld' not found。这就是我想要解决的问题 - 如何初始化和访问这些新对象/bean。
  • 它应该替换原来的行。一旦它发生变化,它应该能够找到 helloWorld。我要说的另一件事是您肯定想做的事情是在 Designer 中从菜单转到 Project -> Build Project。这将确保类被编译。
  • 我在 prod 和 dev 服务器上打开了相同的项目,并且 Package Explorer 视图切换了顺序。因此,我将 bean 和 faces 更改放在 prod 服务器上,而 XPage 在 dev 服务器上,而不是在 dev 服务器上。粗鲁!我能够让它与您的提示一起使用,因为我仍然需要进行您列出的所有更改。感谢托比的帮助!
【解决方案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>

【讨论】:

  • 这是一个关键点。如果 Java 类不是通过 getter 和 setter 公开的一组属性,那么它实际上不是一个 bean……它是一个 POJO(普通旧 Java 对象)。 Java bean 是符合 getter/setter 约定的 Java 类,正如 Mark 所提到的,它实现了 Serializable 接口。
  • 嗨 Per,你的教程是我刚开始时发现的第一批项目之一。除了#{helloWorld.someVariable},本教程没有调用helloWorld 项目的示例,当我尝试执行您上面列出的操作时,它从未向页面返回任何内容。我尝试对返回进行硬编码(所以那里有一些东西),但它仍然是空白的。 @TimTripcony - 我以前有它们,但为了简单起见,我把这个例子删掉了。我将确保遵循真实示例的约定。谢谢提醒。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-06
相关资源
最近更新 更多