我在salesforce中的自定义employee__c对象上定义了自定义验证规则。我使用带有自定义扩展的标准控制器visualforce页面向用户显示用于数据输入的UI。我的挑战是以易于阅读的方式向用户显示验证规则错误。这是我所拥有的代码的一部分。
<apex:page standardController="Employee__c" extensions="EmployeeExtension" sidebar="false">
<apex:sectionHeader ...
<apex:form id=fr>
<apex:pageMessages id="errMsg"/>
<apex:pageBlock title="Employee Edit" mode="edit" >
<apex:pageBlockButtons >
<apex:commandButton action="{!mySave}" value="Save" reRender="errMsg"/>
<apex:commandButton action="{!cancel}" value="Cancel"/>
....
</apex:form>
</apex:page>
public class EmployeeExtension {
....
public PageReference mySave(){
....
try{
upsert empList;
} catch (DMLException ex) {
ApexPages.addMessages(ex);
}
}
}
这显示了页面顶部的错误,这是我想要的方式,但它显示了两次。以下是它将如何在页面顶部显示错误。
- 的 error_message_from_custom_validation_comes_here
- TriggerEmployee:第0行的异常;第一个错误:FIELD_CUSTOM_VALIDATION_EXCEPTION, error_message_from_custom_validation_comes_here
在我的整个控制器中,我没有任何其他DML操作,也没有在任何其他地方使用ApexPages.addmessage。奇怪的是,如果我删除
ApexPages.addMessages(ex);
同时保持try catch块,然后我只看到
- 的 error_message_from_custom_validation_comes_here
我想知道为什么它在vf页面中显示页面消息,即使我没有从控制器发送任何内容。我感谢您的所有回复,但我希望看到不涉及javascript或jquery的解决方案。
答案 0 :(得分:1)
您可以使用:
ApexPages.addMessage(
new ApexPages.Message(
ApexPages.severity.ERROR,
ex.getMessage()
)
);
或者您也可以模仿standardController:
public class EmployeeExtension {
....
public PageReference mySave(){
/* do your thing */
return this.standardController.save();
}
}
这样您就可以返回保存的页面引用,这是标准行为(如果您想模仿它),如果有验证错误,它将显示在标记中,只显示格式正确的消息。
您在保存时不需要reRender:
<apex:page standardController="Employee__c" extensions="EmployeeExtension" sidebar="false">
<apex:sectionHeader ...
<apex:form id=fr>
<apex:pageMessages/>
<apex:pageBlock title="Employee Edit" mode="edit" >
<apex:pageBlockButtons >
<apex:commandButton action="{!mySave}" value="Save"/>
<apex:commandButton action="{!cancel}" value="Cancel"/>
....
</apex:form>
</apex:page>
Salesforce / Visualforce将为您完成剩下的工作:)