You need to sign in to do that
Don't have an account?
k_ogawa
選択リストをチェックボックスで表示
お世話になっております。
現在、visualforce、apexを使用し、画面開発中なのですが、
カスタム項目で設定している選択リストの内容をチェックボックスで画面表示して、
チェックされたものを基にデータを作成しようとしています。
ネットで仕様に沿った処理方法を探しながら作成しているのですが、なかなか見つからず
こちらに頼ることにしました。
どなたか、ご教授よろしくお願い致します。
現在、visualforce、apexを使用し、画面開発中なのですが、
カスタム項目で設定している選択リストの内容をチェックボックスで画面表示して、
チェックされたものを基にデータを作成しようとしています。
ネットで仕様に沿った処理方法を探しながら作成しているのですが、なかなか見つからず
こちらに頼ることにしました。
どなたか、ご教授よろしくお願い致します。
山﨑と申します。
以下のようなコードではいかがでしょうか。
<Apex>
<Visualforce>
上記サンプルでは、カスタムオブジェクトMyObj__cにある選択リスト項目PicklistValues__cの値を取得し
チェックボックスを表示してます。
All Answers
山﨑と申します。
以下のようなコードではいかがでしょうか。
<Apex>
<Visualforce>
上記サンプルでは、カスタムオブジェクトMyObj__cにある選択リスト項目PicklistValues__cの値を取得し
チェックボックスを表示してます。
コードサンプルまで頂きありがとうございます。
早速サンプルを基に作りかけのソースにコードを当てはめてみたのですが、
エラーになってしまいました。
Visualforceの方には、
<apex:selectCheckboxes value="{!selections}" >
<apex:selectOptions value="{!seloptions}"/>
</apex:selectCheckboxes>
上記の部分のみ追記したのですが、
<apex:selectOptions value="{!seloptions}"/>
この部分がエラーになってしまうようです。
エラー内容は『File only saved locally, not to server』のみで何が間違っているのか検討もつきません。
まだほとんどVisualforce、Apexについて理解できていないので、これはダメ!というルールがわからずに
開発を行っています。
apex:selectOptionsは一度しか使えないなどのルールがあるのでしょうか?
※『options』という定義は既に同じコントローラー内で使用している為、『seloptions』に
変更しました。
エラーメッセージで検索した限り、Force.com IDEかと思われますが...
apex:selectOptionsは一度しか使えない、というルールは聞いたことがないのですが、
問題の切り分けのため、以下を試してみてはいかがでしょうか?
1. デプロイしている開発環境にログインし、該当のVisualforceを直接編集する。
書き方におかしな部分があれば、保存時にエラーが出るはずです。
2. (開発環境がForce.com IDEならば)該当のファイルを右クリックし、「Force.com > Save to Server」を実行する。
開発環境はおっしゃる通り、Force.com IDEを使用しております。
1を試した結果、『Error: 不明なプロパティ「AccountStandardController.seloptions」』と表示されました。
standardControllerには標準オブジェクトの"Account"を指定しています。
2を試した結果、反映されませんでした。(エラーがあると反映してくれないようです。)
1が原因だということはわかったのですが、この変数名は使えないということで怒られているのでしょうか・・・
standardControllerに"Account"を指定しているにもかかわらず、カスタムオブジェクトの選択リストを表示しようとしているから
怒られているのでしょうか?
同じコントローラ内で指定したoptionsは問題なく使えてるようです。
サンプルコードにもありますように、カスタムコントローラ内でgetSelOptions()というメソッドが用意されていること、
かつそれがデプロイされていることを(ローカルではなく開発組織内で)確認いただけますでしょうか。
上記の処理がされていませんでした。
お陰様でチェックボックスを表示することが出来ました。
本当にありがとうございます。
何度も質問してしまい申し訳ありませんが、もうひとつ伺ってもよろしいでしょうか?
選択リストのリスト数が多く、チェックボックス表示にするとすべて横に表示されてしまうのですが、
チェックボックスが5個表示されたら折り返しといったようなことは出来るのでしょうか?
チェックボックスで選択されたデータは
[a,b,c,d]
のように保持されると思いますが、
これを別々のレコードにしたい場合はどのようにすればよいでしょうか?
よろしくお願い致します。
無事解決しました。
画面に表示されるチェックボックスの折り返し表示に関してはアドバイス募集中です。
少々調べてみましたが、
一定数おきにチェックボックスを折り返すというのは
簡単には実現ができないように思われます。
次善策として、<apex:selectCheckboxes>のオプションにlayout="pageDirectionを指定すると
チェックボックスが縦に並ぶようになります。
http://www.salesforce.com/us/developer/docs/pages/Content/pages_compref_selectCheckboxes.htm
(1個ずつ折り返すので、期待されている動作とは違いますが...)
後は、
(1) CSSでチェックボックスを表示するコンポーネントの最大幅を指定する
(2) JavascriptでDOMのレイアウトを操作する
などといった方法が考えられますが、こちらは具体的な方法については未確認です。
お世話になっております。
わざわざお調べ頂き感謝いたします。
次善策として教えて頂きました、"pageDirection"を指定し縦並びとし、<apex:pageBlock>のmode="contact"とすることで
何とか解決できました。
貴重なお時間頂きまして、ありがとうございました。
また、質問することが多々あるかと思うので、そのときは是非よろしくお願いいたします。
ご丁寧にありがとうございます。
無事に解決したとのことで、何よりです。
よろしければベストアンサーを選択の上、
本件をクローズしていただけますようお願いします。
また別なご質問の際にお力になれれば幸いです。
よろしくお願いします。