思い通りに動くと思います!コンストラクターのロジックが多すぎる可能性があります。そして、コンポーネントのコンストラクターは実行する必要があります。
この例を確認してください。私にとってはうまくいきます(つまり、2番目のタブに移動したときにのみ例外がスローされます)。
public class tabTest{
public Contact getContact(){
throw new exampleException('That\'s no moon. It\'s a space station.');
}
public class exampleException extends Exception{}
}
<apex:page controller="tabTest">
<apex:tabpanel switchtype="ajax" selectedTab="tab1">
<apex:tab name="tab1" label="1st" >1</apex:tab>
<apex:tab name="tab2" label="it's a trap!">{!contact.LastName}</apex:tab>
</apex:tabpanel>
</apex:page>
コンストラクターが呼び出されたときに (メイン ページで、次に各コンポーネントに対して) 呼び出されるロジックがたくさんありますか? その一部をアクション メソッド (getter メソッドを返すもの:
public List<Contact> myData{
get{
if(myData == null){
myData = [SELECT Id FROM Contact LIMIT 5];
}
return myData;
}
private set;
}
クレイジーに見えることはわかっていますが、2008 年以降は有効な構文ですgetMyData()
;) 従来の呼び出しを行うこともできます。
好みの問題ですが、基本的な初期化だけで、コンストラクターをできるだけ薄くしようとしています。あらゆる種類のものをフェッチし始めると、毎回すべてのデータを必要としないエンド ユーザーにとって遅延を意味します。
ユーザーがアクションを実行するときにコードを実行することに関するより一般的な質問については、タグとオプションの全範囲があります: commandButtons、commandLinks、actionSupport、actionFunction、JavaScript リモート処理...すべてのリンクを貼り付けるつもりはありませんが、たくさんあります例のうち、少なくともhttp://wiki.developerforce.com/page/Visualforce_DynamicEditPageです。