FrontPage

Spring-MVC用archeTypeプラグイン

Spring-MVC用archeTypeプラグインによって生成されるファイルについて説明します。

java/example/test/domain/Member.java

example.test.domainパッケージには、モデルとなるクラスをセットします。

モデルクラスは、必ずprivate Integer id;のフィールドを定義する必要があります

Member.javaの内容は、完全なPOJOです。

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

example.test.serviceパッケージには各種サービスを定義します。 IMember.javaは、MemberDaoのインタフェースが定義されています。

IMember.javaの定義は以下の通りです。通常のDaoと違うところはprintメソッドを 定義しているところです。これがあるとテストの時にオブジェクトの比較が簡単に なるので、重宝しています。

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(更新されない)

MemberManager.javaは、MemberDaoのサブクラスとして定義してあり、Dao以外のサービスを定義するために生成してあります。このファイルは、GenMVCプラグインでは更新されません。

MemberManager.javaの定義は以下の通りです。

package example.test.service;

import example.test.service.stub.MemberDao;

public class MemberManager extends MemberDao {

}

java/example/test/service/stub/MemberDao.java

IMemberを実装したDaoです。printメソッドのために、DbHelper を使っています。

MemberDao.javaの定義は以下の通りです。HibernateDaoSupportを使っているため、非常にシンプルになっています。

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(更新されない)

example.test.webパッケージにはSpringのWebコントローラを定義します。

EditMemberController.javaは、SimpleFormControllerのサブクラスで、編集画面へのデータをセットしたり、DBに値を保存する処理をします。一カ所だけトリッキーなことをしているのが、addリンクを押したときにidなしの要求をだします、この時 MissingServletRequestParameterException 例外が発生するのでそのタイミングで新規オブジェクトを生成し、DBに登録しています。

EditMemberController.javaの定義は以下の通りです。

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(更新されない)

MemberOpsControllerは、MultiActionControllerのサブクラスとして定義されています。 Memberに対する新しいWeb要求を定義するときにその名前のメソッドを定義するだけでWeb要求を 提供することができます。MemberOpsControllerでは、list, add, deleteを定義しています。

MemberOpsController.javaの定義を以下に示します。

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;
    }
}

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
SmartDoc