Salesforce 如何在Visualforce页面上仅显示自定义验证中提取的错误消息?

Salesforce 如何在Visualforce页面上仅显示自定义验证中提取的错误消息?,salesforce,apex-code,visualforce,Salesforce,Apex Code,Visualforce,我使用对象的配置添加了一些自定义验证。我通过visualforce页面插入该对象记录。我在visualforce页面上添加了。我还编写了捕获异常和显示错误消息ob VF页面的代码块。请在下面查找代码块: catch(DMLException excp) { ApexPages.Message msg = new ApexPages.Message(Apexpages.Severity.ERROR, excp.getMessage() ); ApexPages.addMessage

我使用对象的配置添加了一些自定义验证。我通过visualforce页面插入该对象记录。我在visualforce页面上添加了
。我还编写了捕获异常和显示错误消息ob VF页面的代码块。请在下面查找代码块:

catch(DMLException excp)
{
    ApexPages.Message msg = new ApexPages.Message(Apexpages.Severity.ERROR, excp.getMessage() );
    ApexPages.addMessage(msg);  
    return null;                            
} 
我仍然无法从自定义验证中获得唯一的错误消息。它向我显示了如下错误:

插入失败。第0行的第一个异常;第一个错误: 字段\自定义\验证\异常, 来自自定义验证的错误消息出现在此处


有什么解决方案吗?

您需要这样获得DML消息:

ApexPages.Message msg = new ApexPages.Message(Apexpages.Severity.ERROR, excp.getdmlMessage(0) );
ApexPages.addMessage(msg);

最好的方法是使用addMessages,注意复数形式。它的优点是只显示消息的详细信息,对于批量操作,同一消息只显示一次,我个人最喜欢的是:它只有一行,因此如果它是一个不稳定的异常,您的覆盖率会更高

try {
    //failed dml operation
} catch(DmlException excp) {
    ApexPages.addMessages(excp);
}

通过对Miguel的代码再使用一个字符串函数,您将得到准确的“验证错误消息”。 谢谢你,米盖尔。你的代码帮助了我。 希望这有帮助

str = errorMessage.substringBefore(':');

这是一个很好的答案!我从来不知道这件事
str = errorMessage.substringBefore(':');