我正在重组我的应用程序。在当前的设计中,我在单个类(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类?
答案 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);
}
}