- 追加された行はこの色です。
- 削除された行はこの色です。
[[FrontPage]]
* Spring-MVC用archeTypeプラグイン [#x1699a79]
Spring-MVC用archeTypeプラグインによって生成されるファイルについて説明します。
** java/example/test/domain/Member.java [#h69b6255]
example.test.domainパッケージには、モデルとなるクラスをセットします。
''モデルクラスは、必ずprivate Integer id;のフィールドを定義する必要があります''。
Member.javaの内容は、完全なPOJOです。
#pre{{
package example.test.domain;
/**
* Member
*
*/
public class Member {
private Integer id;
private String name;
private String address;
// Eclipse で自動生成されたgetter/setter
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}}
** java/example/test/service/IMember.java [#f069ba91]
example.test.serviceパッケージには各種サービスを定義します。
IMember.javaは、MemberDaoのインタフェースが定義されています。
IMember.javaの定義は以下の通りです。通常のDaoと違うところはprintメソッドを
定義しているところです。これがあるとテストの時にオブジェクトの比較が簡単に
なるので、重宝しています。
#pre{{
package example.test.service;
import example.test.domain.Member;
public interface IMember {
void saveOrUpdate(Member member);
void delete(Member member);
Member findById(Integer id);
Member[] findAll();
String print(Member member);
}
}}
** java/example/test/service/MemberManager.java(更新されない) [#jaef5287]
MemberManager.javaは、MemberDaoのサブクラスとして定義してあり、Dao以外のサービスを定義するために生成してあります。このファイルは、GenMVCプラグインでは更新されません。
MemberManager.javaの定義は以下の通りです。
#pre{{
package example.test.service;
import example.test.service.stub.MemberDao;
public class MemberManager extends MemberDao {
}
}}
** java/example/test/service/stub/MemberDao.java [#wab68a48]
IMemberを実装したDaoです。printメソッドのために、DbHelper を使っています。
MemberDao.javaの定義は以下の通りです。HibernateDaoSupportを使っているため、非常にシンプルになっています。
#pre{{
package example.test.service.stub;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import jp.co.pwv.utils.DbHelper;
import example.test.domain.Member;
import example.test.service.IMember;
public class MemberDao extends HibernateDaoSupport implements IMember {
private DbHelper helper = new DbHelper(Member.class);
public void saveOrUpdate(Member member) {
getHibernateTemplate().saveOrUpdate(member);
}
public void delete(Member member) {
getHibernateTemplate().delete(member);
}
public Member findById(Integer id) {
return (Member)getHibernateTemplate().get(Member.class, id);
}
public Member[] findAll() {
List list = getHibernateTemplate().loadAll(Member.class);
return (Member[])list.toArray(new Member[list.size()]);
}
public String print(Member member) {
return (helper.toString(member));
}
}
}}
** java/example/test/web/EditMemberController.java(更新されない) [#l0aadaf0]
example.test.webパッケージにはSpringのWebコントローラを定義します。
EditMemberController.javaは、SimpleFormControllerのサブクラスで、編集画面へのデータをセットしたり、DBに値を保存する処理をします。一カ所だけトリッキーなことをしているのが、addリンクを押したときにidなしの要求をだします、この時 MissingServletRequestParameterException 例外が発生するのでそのタイミングで新規オブジェクトを生成し、DBに登録しています。
EditMemberController.javaの定義は以下の通りです。
#pre{{
package example.test.web;
import javax.servlet.http.HttpServletRequest;
import example.test.domain.Member;
import example.test.service.MemberManager;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.ServletRequestUtils;
import org.springframework.web.servlet.mvc.SimpleFormController;
public class EditMemberController extends SimpleFormController {
private MemberManager manager;
public void setManager(MemberManager manager) {
this.manager = manager;
}
protected Object formBackingObject(HttpServletRequest request) throws Exception {
try {
int id = ServletRequestUtils.getRequiredIntParameter(request, "id");
Member member = manager.findById(new Integer(id));
return member;
}
catch (MissingServletRequestParameterException e) {
// idが無い場合には新しいRecipeを生成し、idを割り付ける
Member member = new Member();
manager.saveOrUpdate(member);
return member;
}
}
protected void doSubmitAction(Object object) throws Exception {
Member member = (Member) object;
manager.saveOrUpdate(member);
}
}
}}
** ** java/example/test/web/MemberOpsController.java(更新されない) [#p02f1d97]
MemberOpsControllerは、MultiActionControllerのサブクラスとして定義されています。
Memberに対する新しいWeb要求を定義するときにその名前のメソッドを定義するだけでWeb要求を
提供することができます。MemberOpsControllerでは、list, add, deleteを定義しています。
MemberOpsController.javaの定義を以下に示します。
#pre{{
package example.test.web;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import example.test.domain.Member;
import example.test.service.MemberManager;
import org.springframework.web.bind.ServletRequestUtils;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
public class MemberOpsController extends MultiActionController {
private MemberManager manager;
public void setManager(MemberManager manager) {
this.manager = manager;
}
public ModelAndView list(HttpServletRequest request, HttpServletResponse response) throws Exception {
return new ModelAndView().addObject(manager.findAll());
}
public ModelAndView add(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("editMemmber.htm");
return modelAndView;
}
public ModelAndView delete(HttpServletRequest request, HttpServletResponse response) throws Exception {
int id = ServletRequestUtils.getRequiredIntParameter(request, "id");
Member member = manager.findById(new Integer(id));
manager.delete(member);
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject(manager.findAll());
modelAndView.setViewName("memberops/list");
return modelAndView;
}
}
}}