続いて、ページ切り替え用のリンクを設けます。
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
private Tag makeLink( String str, int page_no, int article_no ) throws PageException { String query = "page=" + Integer.toString( page_no ); String fragment = null; article_no %= MAX_ARTICLE; if ( article_no > 0 ) { fragment = "jump" + Integer.toString( article_no ); } URIAttribute href = createPageToURI( "href", PageType.BLOG_HTML, fragment, query ); Tag tag = new Tag( "a", false ); tag.setAttribute( href ); tag.setValueString( str ); return tag; } private void addPageLink() throws PageException { Tag tag = new Tag( "div", false ); if ( page > 0 ) { tag.addHTMLPart( makeLink( "前へ", page - 1, 0 ), new Text( " | " ) ); } tag.addHTMLPart( makeLink( "ホーム", 0, 0 ) ); // 最大ページ番号 int page_count = (Article.db.size() + MAX_ARTICLE - 1) / MAX_ARTICLE - 1; if ( page < page_count ) { tag.addHTMLPart( new Text( " | " ), makeLink( "次へ", page + 1, 0 ) ); } getMainDiv().addHTMLPart( tag ); } public Page outputMain( Page from, RequestParameter req ) throws PageException { // 出力内容を設定します。 // 初期化したい場合は、init()をコールして下さい。 getMainDiv().removeHTMLPart(); for ( int i = 0; i < MAX_ARTICLE; i++ ) { addArticle( page * MAX_ARTICLE + i ); } addPageLink(); return this; }
最近の記事も同様に処理します。 最近の記事は<UL>タグです。 <UL>タグはListクラス、<LI>タグは ListItem クラスです。 最大5件までリンクを生成します。
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
private void makeNewLink() throws PageException { List list = getNewUl(); list.removeHTMLPart(); int count = Article.db.size(); if ( count > 5 ) count = 5; for ( int i = 0; i < count; i++ ) { ListItem item = new ListItem( ListItem.Type.LIST_ITEM ); item.addHTMLPart( makeLink( Article.db.get( i ).title, i / MAX_ARTICLE, i ) ); list.addHTMLPart( item ); } } public Page outputMain( Page from, RequestParameter req ) throws PageException { // 出力内容を設定します。 // 初期化したい場合は、init()をコールして下さい。 getMainDiv().removeHTMLPart(); for ( int i = 0; i < MAX_ARTICLE; i++ ) { addArticle( page * MAX_ARTICLE + i ); } addPageLink(); makeNewLink(); return this; }
管理ページからこのページに戻ると、履歴が参照されるため表示ページを覚えています。
しかし、管理ページから戻った場合はホーム状態が良いでしょう。
このため、管理ページから戻る際は履歴をクリアし、新規インスタンスを表示させるようにします。
AdminHtml の inputMain に履歴クリア処理を入れます。
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
public Forward inputMain( RequestParameter req, Forward fw ) throws PageException { // fwにはモックアップと同じ遷移先が設定されています。 // 別の遷移先としたい場合は、新しくForwardインスタンスを生成して // リターンして下さい。 if ( getDeleteInput().isClicked() ) { Tag[] tag = getTargetTags(); for ( int i = 0; i < tag.length; i++ ) { CheckBox box = (CheckBox)tag[i]; if ( box.isChecked() ) { Article.db.remove( (Article)box.getUserData() ); deleteImage( (Article)box.getUserData() ); } } makeList(); } else if ( getPostInput().isClicked() ) { Article article = null; try { Control.checkNull( "が未入力です。", getTitleInput(), getTextTextarea() ); String[] category = getCategorySelect().getValueStrings(); if ( category.length == 0 ) { throw new ControlException( "が未入力です。", getCategorySelect() ); } article = new Article( getTitleInput().getValueString(), getTextTextarea().getValueString(), category ); article.image[0] = getFileName( getTopImageInput() ); article.image[1] = getFileName( getBottomImageInput() ); // 正しいデータなので登録する。 Article.db.add( 0, article ); makeList(); // 入力項目は初期化する getTitleInput().setValueString( null ); getTextTextarea().setValueString( null ); getCategorySelect().setValueString( null ); getErrorFont().setVisible( false ); } catch( ControlException e ) { Tag error = getErrorFont(); error.setVisible( true ); error.setValueString( e.getControl().getTitle() + e.getMessage() ); getTopImageInput().delete(); getBottomImageInput().delete(); deleteImage( article ); } } if ( fw.getPageID() == PageType.BLOG_HTML ) { req.getHistory().removePage( PageType.BLOG_HTML ); req.getHistory().removePage( PageType.ADMIN_HTML ); } return fw; }