Я задаю этот вопрос от имени одного из моих разработчиков. Сам не разбирался в деталях.
Предположим, у вас есть простой управляемый компонент (= контакт). Этот компонент имеет метод для получения контактов firstName.
Я могу открыть xpage и привязать bean-компонент к полю computedText # {contact.firstName}
В нашем приложении мы используем tabContainer для открытия нескольких документов одного типа (контакта).
Как мне использовать мой боб в контейнере?
лица-config.xml:
<managed-bean>
<managed-bean-name>person</managed-bean-name>
<managed-bean-class>com.package.Person</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
Класс Java Bean:
public class Person implements Serializable {
private String strDocumentID;
private Document docData;
private String strFirstName;
private String strLastName;
private static final long serialVersionUID = 2934723410254681213L;
public Person() {
//setting the DocumentUniqueID of the current in a tab opened document
//attention: there could be more than one open tab, all with different documents
//and even different document types; and it is possible to switch back and forth between tabs
//DocumentId = ???;
//Setting the values from the stored document to the object
//setValues();
}
private void setValues() {
try {
Session session=NotesContext.getCurrent().getCurrentSession();
Database currdb=session.getCurrentDatabase();
docData=currdb.getDocumentByUNID(DocumentId);
setStrFirstName(docData.getItemValueString("FirstName"));
setStrLastName(docData.getItemValueString("LastName"));
} catch (NotesException e) {
throw new FacesException("Could not open document for documentId "+ DocumentId, e);
}
}
public Document getDataDocument() {
return docData;
}
public void setDataDocument(Document docData) {
this.docData = docData;
}
public String getDocumentId() {
return DocumentId;
}
public void setDocumentId(String documentId) {
DocumentId = documentId;
}
public String getStrFirstName() {
return strFirstName;
}
public void setStrFirstName(String strFirstName) {
this.strFirstName = strFirstName;
}
public String getStrLastName() {
return strLastName;
}
public void setStrLastName(String strLastName) {
this.strLastName = strLastName;
}
}
Пользовательский элемент управления с вычисляемым полем:
person.strFirstName
Итак, проблема в конструкторе класса Person. Он должен получить «ссылку» на открытый документ, когда документ открывается на вкладке и каждый раз, когда переключается обратно на эту вкладку. И это без использования какого-либо источника данных, потому что это то, что должно быть сделано самим управляемым компонентом.
Так что, надеюсь, это помогло немного лучше понять проблему.
Если нет, пожалуйста, спросите еще раз.