[Visualforce] カスタム設定から選択肢を設定し必須表示する

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] 必須チェックのエラー文言をカスタマイズする

参考

   このエントリーをはてなブックマークに追加