已返回的notesdocument的空值

时间:2016-02-22 09:55:57

标签: java xpages xpages-ssjs

我正在重组我的应用程序。在当前的设计中,我在单个类(Person)中拥有person对象的所有逻辑,但我已经理解,Person类应该只描述数据模型并且Person数据模型周围的所有操作都应该更好由Controller类处理(例如PersonController)。

当我将此类代码从Person移动到PersonController类时,我得到的是NOT而不是返回的NotesDocument。

以下是一些示例代码:

public void getByUnid(String unid) throws NotesException{
        Database db = dao.getDatabase();
        Document doc = db.getDocumentByUNID(unid);      
        if (null == doc) {
            //doc not found
        } else {
            //doc found
            prepareDoc(doc);
        }
        doc.recycle();
        db.recycle();
    }


    private void prepareDoc(Document doc) throws NotesException {
            fname = doc.getItemValueString("fname");    
//...get other fields
    }

通常我会调用Person.getByUnid(id)并且它可以正常工作。当我调用PersonController.getByUnid(id)时,doc值为null。

我在xpage中的beforeonpageload事件中进行调用,例如person.xsp:

<xp:this.beforePageLoad><![CDATA[#{javascript:

var id = paramValues.get("UNID");

if (id != null){
    PersonController.getByUnid(id.toString());
}

else{
    Person.create();
}}]]></xp:this.beforePageLoad>

我做错了什么,或者我应该在PersonController类中包含Person类?

1 个答案:

答案 0 :(得分:3)

我认为如果不显示所有相关代码,您就无法得到直接答案。例如,在这种情况下,我们无法看到“dao”的来源。

但是禁止这样做。我会质疑是否需要“PersonController”。这可能确实是一种更“Java纯粹主义”的方法,这很好,但是如果你有一些没有它的东西,那么我会说如果需要的话可以去做有效的工作和重构。

以下是我从一个相当古老的例子中得到的一个人类,但直到今天我仍然使用相同的概念。我有各种“加载器”方法负责获取文档,然后传递给加载值方法来填充对象。 save方法基本上颠倒了这个过程。

再次 - 如果您发布更多代码,我们可以查看原始问题。

如果您需要,可以在NotesIn9.com或XPages.TV中使用更多Java和XPages示例。

package com.notesin9.examples;
import java.io.Serializable;
import lotus.domino.*;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;

import com.ZetaOne.util.*;


public class Person implements Serializable, Comparable<Person> {
    private static final long serialVersionUID = 1L;

    private String firstName;
    private String lastName;
    private String city;
    private boolean readOnly;
    private String unid;
    private Boolean newNote;
    private String unique;

    public Person() {

    }

    public void create() throws NotesException{
        // System.out.println("Creating New");
        newNote = true;     
        JSFUtil jsfUtil = new JSFUtil();
        Session session = jsfUtil.getSession();
        unique = String.valueOf(session.evaluate("@Unique").get(0));
    }

    public void loadByKey(String key) throws NotesException {
        // Loading by unique key to the document
        JSFUtil jsfUtil = new JSFUtil();
        Session session = jsfUtil.getSession();

        Database currentDB = jsfUtil.getCurrentDatabase();
        View mainView = currentDB.getView("byKey");
        Document doc = mainView.getDocumentByKey(key);

        if (null == doc) {
            System.out.println("Document not found");
        } else {
            loadValues(doc);
        }

        doc.recycle();
        mainView.recycle();

    }
    public void loadByUnid(String unid) throws NotesException{
        // Loading by document unid
        JSFUtil jsfUtil = new JSFUtil();
        Session session = jsfUtil.getSession();

        Database currentDB = jsfUtil.getCurrentDatabase();
        Document doc = currentDB.getDocumentByUNID(unid);

        if (null == doc) {
            System.out.println("Document not found");
        } else {
            loadValues(doc);
        }
        doc.recycle();

    }

    public void loadValues(Document doc) throws NotesException {
        firstName = doc.getItemValueString("firstName");
        lastName = doc.getItemValueString("lastName");
        city = doc.getItemValueString("city");
        newNote = false;
        unique = doc.getItemValueString("unique");
        unid = doc.getUniversalID();
        // System.out.println("Person Loaded");
    }


    public void save() throws NotesException {
        JSFUtil jsfUtil = new JSFUtil();
        Session session = jsfUtil.getSession();

        Database currentDB = jsfUtil.getCurrentDatabase();
        Document doc = null;  // PlaceHolder

        if (newNote) {
            // True means never been saved
            System.out.println("This is a new Doc");
            doc = currentDB.createDocument();
            doc.replaceItemValue("form", "person");
        } else {
            System.out.println("This is an existing doc");
            doc = currentDB.getDocumentByUNID(unid);

        }
        // Common elements to save
        doc.replaceItemValue("firstName", firstName);
        doc.replaceItemValue("lastName", lastName);
        doc.replaceItemValue("city", city);
        doc.replaceItemValue("unique", unique);

        // System.out.println("about to save");
        doc.save();
        doc.recycle();
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public boolean isReadOnly() {
        return readOnly;
    }

    public void setReadOnly(boolean readOnly) {
        this.readOnly = readOnly;
    }

    public String getUnid() {
        return unid;
    }

    public void setUnid(String unid) {
        this.unid = unid;
    }

    public Boolean getNewNote() {
        return newNote;
    }

    public void setNewNote(Boolean newNote) {
        this.newNote = newNote;
    }

    public String getUnique() {
        return unique;
    }

    public void setUnique(String unique) {
        this.unique = unique;
    }

    public int compareTo(Person comparePerson) {
         // Default by Last name Sort
        String personName1 = this.getLastName().toUpperCase() + ", " + this.getFirstName().toUpperCase();
        String personName2 = comparePerson.getLastName().toUpperCase() + ", " + this.getFirstName().toUpperCase();

        //ascending order
        return personName1.compareTo(personName2);

        //descending order
        //return cityName2.compareTo(cityName1);

    }   
}