You need to sign in to do that
Don't have an account?
リストボックスの選択項目をAPEX側で取得する方法
VisualforceページとAPEXにてアンケートサイトを作成しています。
作成途中でつまづいておりご助言頂ければ幸いです。
<想定している動作>
[1]はDB内のオブジェクトから項目を取得し、ユーザにはリストボックスで表示させます。
[2]
ユーザがリストボックス内から選択後に、登録ボタンを押し「アンケート回答結果オブジェクト」へ回答結果を
挿入するといった動作を想定しています。
<疑問点>
上記[2]でVisualforceページ上でユーザが選択した項目を
APEX側で取得する方法がわからない状態です。
拙いですがソースも記載させて頂きます。
何か取得するメソッドがあるのか、あるいは根本的に間違っているのか、
もしくは参考URLなどをご存じの方がいたらご指摘頂ければ大変助かります。
<Visualforceページのソース>
<apex:page controller="SelectOptionsTest" >
<apex:form >
<!-- リストボックスを表示 -->
<apex:selectList>
<apex:selectOptions value="{!ListItems}"/>
</apex:selectList><p/>
<apex:commandButton action="{!doEntry}" value="登録" />
</apex:form>
</apex:page>
<Apexのソース>
doEntry部分が未解決です。
当初は、optionListListのgetValueメソッドで取得できるかと思いましたが、
ユーザが選択している項目を取得できなかったため、壁に当たっています。
public class SelectOptionsTest {
private List<EnquetAnswerTable__c> ansList;
private List<Selectoption> optionListList = new List<Selectoption>();
private List<DebugMsg__c> DebugMsgList = new List<DebugMsg__c>(); //デバックメッセージ格納用
/* ページ読み込み時に呼ばれる */
public SelectOptionsTest (){
this.ansList = [Select ID,NAME,e_sec__c , a_Answer__c
From EnquetAnswerTable__c
];
}
/* リストボックスに表示させる項目 回答候補の作成 */
public List<SelectOption> getListItems() {
//回答欄リストをSelectOptionのインスタンスに登録
for(EnquetAnswerTable__c value : this.ansList){
optionListList.add(new Selectoption(value.a_Answer__c, value.a_Answer__c));
}
return optionListList;
}
/* リスト・ラジオ・チェックボックスに表示させる項目 回答候補の作成 */
/* 作成中です */
public void doEntry() {
String str = optionListList[0].getValue(); /* これでは選択された項目は取得できない */
DebugMsgList.add(new DebugMsg__c(StrText__c = str));
insert DebugMsgList;
}
}
<アンケートの設問項目オブジェクトの内容 (EnquetAnswerTable__c)>
1 よい
2 かなりより
3 悪い
4 かなり悪い
この辺が参考になるのではないでしょうか。
http://www.salesforce.com/us/developer/docs/pages/Content/pages_compref_selectList.htm
サンプルではselectListが複数選択リストなので、"countries"が配列になっている点に注意してください。
ご返信ありがとうございました。
こちらの環境でリンク先のソースを実行してみたところ疑問がわきました。
もしご存じでしたらアドバイス頂ければと思います。
リンク先のソースでは、以下のsetメソッドとgetメソッドが定義されています。
public String[] getCountries() {
return countries;
}
public void setCountries(String[] countries) {
this.countries = countries;
}
VisualForceページの以下の個所からgetメソッド部分が呼ばれ、
リストボックス内の選択項目を取得していると理解しています。
<apex:selectOptions value="{!items}"/>
しかし、setメソッドが呼ばれるタイミングとしてはいつなのでしょうか?
PS:
マニュアルとしては以下3点を参考にしています。
setメソッドについて調べた限り特に記述が見当たらず困っています。
もし、私が見落としている個所等あったならご指摘頂ければ幸いです。
「Apex_language_reference_JP_v18_Beta」
「Visualforce Developer's Guide」
「Force.com Apex Code Developer's Guide」
んーと
selectOptionsの{!items}が画面作成時に呼んでいるのはこれで
selectListの{!countries}が画面作成時に呼んでいるのはこれで
値をセットする時に呼ぶのがこれです
そこの紐付けの認識が間違っているのではないでしょうか。
細かいタイミングの話は私には分かりませんが、Controllerが動作する時にセットされるのだと思います。
ここらへんが参考になるかと。
http://www.salesforce.com/us/developer/docs/pages/Content/pages_controller_lifecycle.htm
サンプルソースを色々いじってみましたが、
setメソッドは画面からユーザが選択する度に呼び出されているような動作に見えますね。
参考情報・ご助言等ありがとうございました。
勉強になりました。