Visualforceページにて、選択リストをカスタム設定のリストから取得し、必須の赤いバーを表示させる方法。
今回は都道府県の設定をカスタム設定で設定しているとする。
- カスタム設定のAPI参照名 :
Prefectures__c
- 都道府県名を保存している項目名 :
Label__c
- 入力先の項目名 :
pref__c
カスタム設定の取得
これは別で記事を書いているのでそちらをどうぞ。
カスタム設定を作成して取得してみる – KayaMemo
こんな感じ。
これでVFページからは、 {!options}
で呼び出せる。
1
2
3
4
5
6
7
8
9
10
| public List<SelectOption> getOptions() {
Map<String, Prefectures__c> prefs = Prefectures__c.getAll();
List<SelectOption> options = new List<SelectOption>();
options.add(new SelectOption('', '--なし--'));
for(String key : prefs.keySet()){
Prefectures__c pref_obj = prefs.get(key);
options.add(new SelectOption(pref_obj.Label__c, pref_obj.Label__c));
}
return options;
}
|
選択リストに任意の値を設定
apex:inputField
を使うと楽だが、それではその項目に設定されている選択肢しか表示できない。
(そもそも選択リスト型でないと選択リストにならない)
よって、apex:selectList
を使うと設定可能。
1
2
3
| <apex:selectList value="{!pref__c}" size="1" multiselect="false" required="true">
<apex:selectOptions value="{!options}"/>
</apex:selectList>
|
表示は以下のようになる。
必須の表示
上記画像からわかるように、required="true"
を指定しているにも関わらず、SF標準の赤い線が出てくれない。
これは、apex:inputField
を利用している時にしか自動で表示してくれないため、自分で設定してやる必要がある。
以下のようになる。
1
2
3
4
5
6
7
8
9
| <apex:pageBlockSectionItem >
<apex:outputLabel value="都道府県" for="prefcbx"/>
<apex:outputPanel styleClass="requiredInput" layout="block">
<apex:outputPanel styleClass="requiredBlock" layout="block"/>
<apex:selectList value="{!pref__c}" id="prefcbx" size="1" required="true">
<apex:selectOptions value="{!options}"/>
</apex:selectList>
</apex:outputPanel>
</apex:pageBlockSectionItem>
|
これで以下のような表示となる。
エラー表示
さらに同じく空だった場合のエラーの表示も自動で挿入してくれなくなるため、これも自分で表示してやる必要がある。
が、このエラー表示がかなり難航してるため、解決したら別ポストで。
以下に書きました。
↓↓
[Visualforce] 必須チェックのエラー文言をカスタマイズする
参考