1

我正在努力处理 XPage 中的对象数据源:

  <xp:this.data>
    <xe:objectData var="demo" ignoreRequestParams="true"
        readonly="false" scope="view"
        createObject="#{javascript:return new demo.SampleBean();}">
    </xe:objectData>
  </xp:this.data>

当我save();在 SSJS 中的 XPage 上执行时,出现错误:

保存数据源演示时出错
数据源中没有实现save方法

这个类相当简单:

package demo;
import java.io.Serializable;

public class SampleBean implements Serializable {

private static final long serialVersionUID  = 1L;
private String name;
private String job;

public String getName() {
    return this.name;
}

public String getJob() {
    return this.job;
}

public void setName(final String name) {
    this.name = name;
}

public void setJob(final String job) {
    this.job = job;
}

public void dummyAction() {
        System.out.println("Here shall be logic");
}   

}

我试图public void save();在类中添加一个方法,但这并没有成功。所以我正在寻找一个对象数据源的样本

4

1 回答 1

5

您已经createObject为数据源定义了属性,但尚未指定saveObject属性......这就是您收到的错误消息(“保存方法尚未实现”)所指的内容。

因此,例如,如果您希望在dummyAction()触发保存时运行您的方法,请尝试以下操作:

<xp:this.data>
  <xe:objectData var="demo" ignoreRequestParams="true"
      readonly="false" scope="view"
      createObject="#{javascript:return new demo.SampleBean();}"
      saveObject="#{javascript:return value.dummyAction();}">
  </xe:objectData>
</xp:this.data>

saveObject属性指定为 SSJS 方法绑定时,将变量value绑定到数据对象,然后调用方法绑定。因此,您可以传递value给其他对象来处理保存对象的业务逻辑,或者您可以使用语法value.anyMethod()将对象序列化的业务逻辑保留在对象本身的内部。

注意:无论您在此方法中使用什么逻辑,您都希望返回一个布尔值(不是void),以便可以将返回值false视为取消,就像标准 Domino 文档数据源所做的那样。

于 2013-10-03T04:03:20.870 回答