こんにちは。
わたちゃんと申します。
今日はですね、検索画面の基本的な作り方を記述していきます。
最近はAndroidばっかで健忘症になっていましてね、ここに書いておいてまた見直そうって思ってます。
ではまず基本のVF"SM_WataSearch_Page"を作っていきますよ。
<apex:page controller="SM_WataSearch_Ctrl" sidebar="false" action="{!init}">
<style type="text/css">
</style>
<script type="text/javascript">
</script>
<!-- レコード表示行数 -->
<apex:variable var="rowNum" value="1" />
<!-- メインページ -->
<apex:outputpanel >
<apex:form id="form1">
<!-- タイトル -->
<apex:sectionHeader title="検索画面"/>
<apex:pageBlock >
<apex:pageMessages id="messagearea" showDetail="false"/>
<div style="text-align:right;">
<!-- 閉じるボタン -->
<apex:commandbutton value="閉じる" style="width:100px; height:30px;"/>
</div>
<!-- 検索条件セクション -->
<apex:pageblockSection id="searchConditionSection" title="検索条件" columns="2" collapsible="true">
<apex:pageBlockSectionItem >
<apex:outputText value="条件1" />
<apex:outputText value="{!conditions1}" />
</apex:pageBlockSectionItem>
<apex:pageBlockSectionItem >
<apex:outputText value="条件2" />
<apex:outputText value="{!conditions2}" />
</apex:pageBlockSectionItem>
</apex:pageblockSection>
<!-- 検索ボタン -->
<div style="text-align:center;">
<apex:commandButton id="searchButton" style="width:100px; height:30px;" action="{!searchAction}" value="検索" rendered="{!}"/>
</div>
<!-- 検索結果セクション -->
<apex:pageblockSection id="searchResultSection" title="検索結果" columns="1" collapsible="true">
<apex:pageblockTable id="resultTable" width="100%" value="{!resultDataList}" var="result" frame="box" >
<!-- No -->
<apex:column headerValue="No" width="3%">
<apex:outputText value="{!rowNum}" />
<apex:variable var="rowNum" value="{!VALUE(rowNum) + 1}" />
</apex:column>
<!-- 結果1 -->
<apex:column headerValue="結果1">
<apex:outputField value="{!result.columns1}"/>
</apex:column>
<!-- 結果2 -->
<apex:column headerValue="結果2">
<apex:outputField value="{!result.columns2}"/>
</apex:column>
<!-- 結果3 -->
<apex:column headerValue="結果3">
<apex:outputField value="{!result.columns3}"/>
</apex:column>
<!-- 結果4 -->
<apex:column headerValue="結果4">
<apex:outputField value="{!result.columns4}"/>
</apex:column>
</apex:pageblockTable>
<table style="margin-left: auto; margin-right: auto;">
<tr>
<!-- ページング -->
<apex:panelGrid columns="5" id="pagingBlock">
<apex:commandLink value="[最初のページ]" rendered="{!pageManager.HasPrevious}" action="{!pageManager.first}" />
<apex:commandLink value="[前のページ]" rendered="{!pageManager.HasPrevious}" action="{!pageManager.previous}" />
<apex:outputtext value="{!pageManager.pageNumber} / {!totalpage}"/>
<apex:commandLink value="[次のページ]" rendered="{!pageManager.HasNext}" action="{!pageManager.next}" />
<apex:commandLink value="[最後のページ]" rendered="{!pageManager.HasNext}" action="{!pageManager.last}" />
</apex:panelGrid>
</tr>
</table>
</apex:pageblockSection>
</apex:pageBlock>
</apex:form>
</apex:outputpanel>
</apex:page>
これが対となる"SM_WataSearch_Ctrl"クラスです。
public with sharing class SM_WataSearch_Ctrl{
// 検索条件1
public String targetConditions1 {get; set;}
// 検索条件2
public String targetConditions2 {get; set;}
// 検索結果
public List<WataChans__c> resultList {get; set;}
// 改ページ用PageManagerクラス
public ApexPages.StandardSetController pageManager {get; set;}
// 総ページ数
public Integer totalpage {get; set;}
// 最大表示件数
private static final Integer PAGING_MAX_ROWS = 10;
// コンストラクタ
public SM_WataSearch_Ctrl(){}
// 初期処理
public PageReference init(){
// 値の初期化
this.targetConditions1 = '';
this.targetConditions2 = '';
this.totalpage = null;
return null;
}
// 検索ボタン押下時処理
public PageReference searchAction() {
// 検索結果を取得
this.resultList = searchWatachans(this.targetConditions1, this.targetConditions2);
// pageManagerに検索結果をセット
this.pageManager = new ApexPages.StandardSetController(this.resultList);
// 1ページの最大表示件数をセット
this.pageManager.setPageSize(PAGING_MAX_ROWS);
// ページ数取得
this.totalpage = getTotalPages(this.pageManager);
// 現在のページ番号セット(件数が存在しない場合、1/0とかいう表示になっちゃうからその対応)
if (this.totalpage == 0) {
this.pageNumber = 0;
} else {
this.pageNumber = this.pageManager.getPageNumber();
}
}
// 対象レコードを検索
private List<WataChans__c> searchWatachans(String conditions1, String conditions2){
// SOQL文を作成
String createQuery = [SELECT columns1,columns2,columns3,columns4 FROM WataChans__c WHERE ];
// クエリ発行
List<WataChans__c> searchResultList = Database.query(createQuery);
// 結果を返す
return searchResultList;
}
// 総ページ数を取得
private Integer getTotalPages(ApexPages.StandardSetController pageManager){
Decimal pages = Decimal.valueOf(pageManager.getResultSize()) / Decimal.valueOf(pageManager.getPageSize());
return Integer.valueOf(pages.round(System.RoundingMode.CEILING));
}
}
以上です。