Raible's Wiki

Raible Designs
Wiki Home
News
Recent Changes

AppFuse

Homepage
  - Korean
  - Chinese
  - Italian
  - Japanese

QuickStart Guide
  - Chinese
  - French
  - German
  - Italian
  - Korean
  - Portuguese
  - Spanish
  - Japanese

User Guide
  - Korean
  - Chinese

Tutorials
  - Chinese
  - German
  - Italian
  - Korean
  - Portuguese
  - Spanish

FAQ
  - Korean

Latest Downloads

Other Applications

Struts Resume
Security Example
Struts Menu

Set your name in
UserPreferences


Referenced by
Articles
Articles_pt
CreateActions
CreateDAO
CreateDAO_sp
CreateDAOiBATIS
CreateDAOiBATIS_ko
CreateManager_es
JSFBeans
SpringControllers
...and 3 more




JSPWiki v2.2.33

[RSS]


Hide Menu

CreateManager


Difference between version 14 and version 13:

At line 76 changed 1 line.
assertTrue(personForm.getRoles().size() == 1);
assertTrue(personForm.getFirstName() != null);
At line 94 changed 2 lines.
// call populate method in super class to populate test data
// from a properties file matching this class name
<span style="color: green">// call populate method in super class to populate test data
// from a properties file matching this class name</span>
At line 147 added 2 lines.
Now let's create a PersonManagerImpl class that implements the methods in PersonManager and uses [BeanUtils.copyProperties|http://jakarta.apache.org/commons/beanutils/api/org/apache/commons/beanutils/BeanUtils.html#copyProperties(java.lang.Object,%20java.lang.Object)]
to convert POJOs &rarr; ActionForms and ActionForms &rarr; POJOs. To do this, create a new class in src/web/**/service and name it PersonManagerImpl.java. It should extend BaseManager and implement PersonManager.
At line 150 added 94 lines.
;:''The [BaseManager|http://raibledesigns.com/downloads/appfuse/api/org/appfuse/webapp/service/BaseManager.java.html] is for registering different Converters (i.e. DateConverter) so that BeanUtils.copyProperties knows how to convert Strings &rarr; Objects. It currently does not have any convenience methods, but does provide a nice place to add them for all your managers.''
{{{
package org.appfuse.webapp.service;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.appfuse.persistence.DAOFactory;
import org.appfuse.persistence.Person;
import org.appfuse.persistence.PersonDao;
import org.appfuse.webapp.form.PersonForm;
public class PersonManagerImpl extends BaseManager implements PersonManager {
<span style="color: green">//~ Instance fields ========================================================</span>
private Log log = LogFactory.getLog(PersonManagerImpl.class);
private PersonDao dao;
private Person person;
private PersonForm personForm;
<span style="color: green">//~ Constructors ===========================================================</span>
public PersonManagerImpl(Object conn)
throws Exception {
dao = (PersonDao) DAOFactory.getInstance(conn, PersonDao.class);
}
<span style="color: green">//~ Methods ================================================================</span>
public Object getPerson(String personname) throws Exception {
person = dao.getPerson(personname);
return convert(person);
}
public Object savePerson(Object obj) throws Exception {
if (person == null) {
person = new Person();
}
personForm = (PersonForm) obj;
<span style="color: green">// copy form properties to person</span>>
try {
BeanUtils.copyProperties(person, personForm);
} catch (IllegalArgumentException i) {
log.error("Exception occured copying properties", i);
throw new ConversionException();
}
<span style="color: green">// BeanUtils.copyProperties converts empty Strings to
// Longs with a value of 0 to prevent a NPE.
// Setting the defaultLong to null (in BaseManager) is another solution</span>
if (ObjectUtils.equals(person.getId(), new Long(0))) {
person.setId(null);
}
dao.savePerson(person);
return getPerson(person.getId());
}
public void removePerson(Object obj) throws Exception {
if (person == null) {
person = new Person();
}
personForm = (PersonForm) obj;
if (log.isDebugEnabled()) {
log.debug("removing person: " +
personForm.getFirstName() + " " +
personForm.getLastName());
}
dao.removePerson(person);
}
}
}}}
You should be able to compile everything now using "ant compile-web". Doh! I guess not:
{{{
PersonManagerImpl.java:11: cannot resolve symbol
[javac] symbol : class PersonForm
[javac] location: package form
[javac] import org.appfuse.webapp.form.PersonForm;
}}}
We need to add XDoclet tags to the Person.java Object to create our Struts ActionForm. In the JavaDoc for the Person.java file, add the following @struts.form tags (use User.java if you need an example):
{{{
* @struts.form include-all="true" extends="BaseForm"
}}}
;:''We extend org.appfuse.webapp.form.BaseForm because it has a toString() method that allows us to call log.debug(formName) to print out a reader-friendly view of the Form object.''
Now, running "ant compile-web" should work just fine.

Back to CreateManager, or to the Page History.