In my latest application, I decided early on that I was going to use Managed Beans for my business logic. Prior to starting I read and listened to everything I could find about them. I am not going to explain how they work in this post, except to point you in the direction of the resources I used.
I learned about JavaBeans way back when I first started studying Java. I learned Java by taking three credit classes at Northlake College in Irving, TX. My instructor worked at IBM and was an excellent teacher. JavaBeans were basically one chapter towards the end of my studies. I think Java Server Faces, of which xpages is an implementation of, had just come out. JSF was only touched on in lecture but was too new for the textbook.
Fast forward to today, I am pretty sure it was a Notes in 9 episode when I first heard about them. I had already created two xpages applications without using them, so I really wanted to know what is in it for me.
The best resources today that I would recommend to learn to use managed beans is to watch Russ Maher's 2 hour Jumpstart from Connect 2013. IBM has posted the video here (Thank You IBM!!). It covers the same material he used in his Notes In 9 episodes in even greater detail. Another great resource is this youtube presentation on Java for Domino Developers by Paul Calhoun. It also runs two hours.
My use of Managed Bean is fairly simple at this point. I use them to hold the data they enter as they click through a data entry wizard. The data is only stored in the bean until they get to the final step. I then write the data as a new document. If the users quits in the middle, then I wipe clean the contents of the bean. The bean also allows users to go forwards and backwards through the screens and see the data they entered. Later, if the user edits the existing document, the bean is reloaded and then updates the backend document upon completion. It can be done but it would be a pain to do all this without using managed beans.
Here is my code. Like I said, this is pretty simple, but I think would be good to someone just getting started. I make a few comments in red. I also cut out most of the instance variables to make this shorter. The scope my bean is using is "session'.
import javax.faces.context.FacesContext;
import lotus.domino.Database;
import lotus.domino.Document;
import java.io.Serializable;
@SuppressWarnings({"serial"})
**I saw someone else do this to suppress warnings so I copied it,think it must be part of Eclipse**
public class StatusBean implements Serializable {
private String status;
private String typePO;
private String unid;
**These getter's and setters were generated by Eclipse. They are required**
public String getTypePO() {
return typePO;
}
public void setTypePO(String typePO) {
this.typePO = typePO;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public void setUnid(String unid) {
this.unid = unid;
}
public String getUnid() {
return unid;
}
public StatusBean(){
//zero argument constructor
**You can have other constructors if you want but you must have one like this.**
}
**This method wipes the contents of the bean, used when cancelling***
public void deleteAllHeaders(){
this.typePO = null;
this.status = null;
this.unid = null;
}
***This method saves the new document and returns the document unique id to the caller***
public String saveNewDocument(){
String unid = "";
try{
*One very long statement below*
Database database = (Database)FacesContext.getCurrentInstance().getApplication()
.getVariableResolver().resolveVariable(FacesContext.getCurrentInstance(), "database");
Document doc = database.createDocument();
doc.replaceItemValue("form", "PO");
doc.replaceItemValue("status", status);
doc.replaceItemValue("typePO", typePO);
doc.save();
unid = doc.getUniversalID().toString();
}
catch(Exception e){
e.printStackTrace();
}
return unid; //return new UNID to the calling SSJS function
}
}
Even if you don't know Java, I wouldn't call this hard stuff. It really doesn't read much different than server-side JavaScript. I haven't written the methods to edit and update existing documents yet, but I don't see that being very complicated. I have to say I really love this way of coding.
A good start. I would make a few changes here. For starters remove the @SupressWarning and create what Eclipse suggests to you: a serialID. Each time you modify the class count it one up. This is for the JVM to keep track on serialized objects and their compatibility to classes. Not that important in XPages, but just a habit you should stick to.
ReplyDeleteFor the saveNewDocument() method I would either provide the database or the document as parameter. Depends a little on your logic. Minimum would be the database - this comes in handy once you decide that your data actually lives in a differnt database than the XPage. It also makes the code shorter since "database" is actually in SSJS. so in SSJS instead of having in a button: myBean.saveNewDocument(); you would have myBean.saveNewDocument(database);
In this case you need to add doc.recycle();
Using the document as parameter would then allow you to have one function that serves both for new and updated documents (you probably would call it saveDocument(doc) instead.
Stephan, I hadn't thought it through yet, but yes I do want to separate my design and data in separate NSF's, so I will make the saveNewDocument() method take a database as its argument. Great tip! If I can combine new and edit in the same method then even better. I will have to read-up on serialID's, I am a big believer in following best practices. I just stole @Suppress Warning from an example I saw without knowing too much about how it works. Thanks for the advice, I really appreciate it!
ReplyDeleteHi,
ReplyDeleteI am in the same position (changing from SSJS to managed beans) so please keep your experiences posted. Much appreciated!
Hello Patrick, thanks for chiming in. I will probably do a Part 2 to this post as I continue to make progress. Your resume has got to be the coolest I ever have seen!
ReplyDeletegreat
ReplyDeleteThis is an awesome post.Really very informative and creative contents. These concept is a good way to enhance the knowledge.
ReplyDeleteI like it and help me to development very well.Thank you for this brief explanation and very nice information.Well, got a good knowledge.
Java training in Chennai
Java training in Bangalore
Java online training
Java training in Pune
From your discussion I have understood that which will be better for me and which is easy to use. Really, I have liked your brilliant discussion. I will comThis is great helping material for every one visitor. You have done a great responsible person. i want to say thanks owner of this blog.
ReplyDeletepython training Course in chennai
python training in Bangalore
Python training institute in bangalore
Hmm, it seems like your site ate my first comment (it was extremely long) so I guess I’ll just sum it up what I had written and say, I’m thoroughly enjoying your blog. I as well as an aspiring blog writer, but I’m still new to the whole thing. Do you have any recommendations for newbie blog writers? I’d appreciate it.
ReplyDeleteAWS Course Interview Questions and Answers for Freshers | AWS Interviews Questions and Answers for Devops
AWS Interview questions and answers for Sysops |AWS Interview Question and Answers BlogSpot
Really it was an awesome article about JAVA, very interesting to read.You have provided an nice article,Thanks for sharing.
ReplyDeleteJava training in chennai | Java training in annanagar | Java training in omr | Java training in porur | Java training in tambaram | Java training in velachery
I really enjoy artical is very nice content.
ReplyDeletePython Training in Chennai
Python Training in Bangalore
Python Training in Hyderabad
Python Training in Coimbatore
Python Training
python online training
python flask training
python flask online training
This is an awesome post.Really very informative and creative contents. These concept is a good way to enhance the knowledge.
ReplyDeleteweb designing training in chennai
web designing training in omr
digital marketing training in chennai
digital marketing training in omr
rpa training in chennai
rpa training in omr
tally training in chennai
tally training in omr
Your blog is exellent. All the topics are briefly explained. I am very glad to read your informative. Thank you for this posting...
ReplyDeleteangular js training in chennai
angular js training in tambaram
full stack training in chennai
full stack training in tambaram
php training in chennai
php training in tambaram
photoshop training in chennai
photoshop training in tambaram
I am happy to be here. Very useful content and also easily understandable providing.
ReplyDeletesap training in chennai
sap training in annanagar
azure training in chennai
azure training in annanagar
cyber security course in chennai
cyber security course in annanagar
ethical hacking course in chennai
ethical hacking course in annanagar
your blog' s design is simple and clean and i like it. Your blog posts about Online writing Help are superb. Please keep them coming. Greets!
ReplyDeleteR Programming Training in Bangalore
apache spark online course
Good content. You write beautiful things.
ReplyDeletekorsan taksi
vbet
vbet
hacklink
taksi
hacklink
mrbahis
mrbahis
sportsbet
kocaeli
ReplyDeletekonya
kuşadası
kütahya
malatya
V4HA3
manisa
ReplyDeletemaraş
mardin
marmaris
mersin
M0Q
erzurum
ReplyDeletekuşadası
ümraniye
beşiktaş
ataşehir
PQH4A
beşiktaş
ReplyDeleteeyüpsultan
gebze
kaş
tekirdağ
70T
That's great post.
ReplyDeletealso, check Java course in Pune