我认为它可以按您的意愿工作!您可能在构造函数中有太多逻辑。并且组件的构造函数必须执行。
检查这个例子,它对我有用(这意味着只有当我导航到第二个选项卡时才会引发异常)。
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。