ONJava.com -- JBoss Seam --> page 3


詳細
第1、2、
3,4,5ページ
 
後退ボタンやマルチラベルやウィンドウがアプリケーションを破壊せず、正常に動作することを確認する必要があります.このため、検索の実行時に開始し、ユーザーが請求書の支払いをしたときに終了する「会話」が導入されます.検索操作を処理し、結果間をナビゲートするセッションBeanから始めましょう.
package com.jboss.dvd.seam;import [...]@Stateful@Name("search")@Conversational(ifNotBegunOutcome="main")@Scope(ScopeType.CONVERSATION)@Interceptors(SeamInterceptor.class)public class SearchAction    implements Search,               Serializable{    @In(create=true)    ShoppingCart cart;    @PersistenceContext(unitName="dvd")    EntityManager em;    private int     pageSize    = 20;    private int     currentPage = 0;     private boolean hasMore     = false;    private Category category = null;    private String   title    = null;    private String   actor    = null;    @Out(scope=CONVERSATION,required=false)    List  searchResults;    @Out(scope=CONVERSATION,required=false)    Map  searchSelections;    // Getters and setters for     // category, title and actor    @Begin(join=true,            processDefinition="shopping")    public String doSearch() {        currentPage=0;        updateResults();        return "browse";    }    public String nextPage() {        if (!isLastPage()) {            currentPage++;            updateResults();        }return null;    }    public String prevPage() {        if (!isFirstPage()) {            currentPage--;            updateResults();        }return null;    }    public boolean isLastPage() {        return (searchResults != null) &&                !hasMore;    }    public boolean isFirstPage() {        return (searchResults != null) &&                (currentPage == 0);    }    private void updateResults() {        [...]        searchResults = [...]        searchSelections = [...]    }    private Query searchQuery(String title,            String actor, Category category) {        title = (title == null) ? "%" : "%" +                    title.toLowerCase() + "%";        actor = (actor == null) ? "%" : "%" +                    actor.toLowerCase() + "%";        if (category == null) {            return em.createQuery(    "from Product p where lower(p.title) like " +     ":title and lower(p.actor) LIKE :actor")                .setParameter("title", title)                .setParameter("actor", actor);        }         else {             return em.createQuery(    "from Product p where lower(p.title) like " +     ":title and lower(p.actor) like :actor " +     "and p.category = :category")                .setParameter("title", title)                .setParameter("actor", actor)                .setParameter("category", category);        }    }    public String addToCart() {        for (Product item: searchResults) {            Boolean selected =               searchSelections.get(item);            if ( selected!=null && selected ) {                searchSelections.put(item, false);                cart.addProduct(item, 1);            }        }        return "browse";    }    @Destroy     @Remove    public void destroy() {}   }

この状態のあるセッションBeanは、会話のコンテキストに格納され、会話の終了時に消滅する.カートはSeamによって管理される別のセッションBeanコンポーネントであり、SearchActionセッションBeanに注入され、これにより、複数の検索が確立されたときに失われない.searchResultsおよびsearchSelectionsのオブジェクトは、現在の会話の中で生存する.使用するメモリは、会話の終了時に解放されます.
第1,2,3,4,5ページ
次のページ