4

On all of my Visualforce Pages that involve user input and DML actions I include the handy <apex:pageMessages/> tag. This is great when I'm creating my own custom error messages, and in some instances if there is a validation rule failure it has it's own page message automatically created. However, this seems to occur rather erratically. Are there any rules out there for when a validation rule failure will automatically generate it's own page message and when I need to make sure to create them manually?

Please note this is not a question about specific piece of code that isn't displaying a message, but rather a question about when Salesforce automatically creates a page message for you that will be shown in the <apex:pageMessages/> tag and when Salesforce will NOT automatically create a page message for you that will be shown.

For the purpose of this question please assume that I'm either doing a full page refresh or am rerendering the page messages component.

3
  • Apex:pageMessages will display any unhandled exceptions or any handled exceptions which are added as ApexPages.Message. If you handle an exception but don't add it as a ApexPages.Message it will not be displayed. Jul 22, 2013 at 22:22
  • Hmm, that hasn't been my experience. I often have two try catch blocks, one for DMLException which I do nothing (since adding anything duplicate the validation failure), and another for a general Exception, which I do have to handle. Jul 22, 2013 at 22:45
  • As a general rule it seems follow another difference in behavior. If the dml exception doesn't generate a page message not catching it takes you to a white screen of death, if the DML exception does generate a page message, not catching it shows the message in page messages if present (or nothing if it's not there). Jul 22, 2013 at 22:50

1 Answer 1

2

You may need to include showDetails="{!showDetails}" on apex:pageMessages.

I'm probably like you - errors can be raised by validation rules, apex class logic using .addError() and general exceptions caught by try - catch.

I tend to always use a Utility method to emit an ApexPages.Message that exploits: ApexPages.Message myMsg = new ApexPages.Message(ApexPages.severity, summary, detail);

The utility method will 'friendlify' the exception message, stripping out unnecessary SFDC verbosity from raised validation errors before outputting the ApexPage.Message

I also use a separate controller method getShowDetails() that decides whether to 'showDetails'. The method checks to see if the text in the detail portion is the same as the text in the summary portion of ApexPages.Message. This works around some VF issues when the summary and detail are essentially the same.

4
  • That's a pretty nice technique checking the existing page messages to avoid duplication of existing messages, never would have thought of that. That said, as you've outlined there are a number of ways errors can be raised, in particular validation rules, but why do some show up automatically in the pageMessages and some don't? Jul 22, 2013 at 23:27
  • @Ralph - good question, I think I kept trying to workaround what I observed and ended up writing a flexible Utility method that dealt with all circumstances as I needed such method anyway to friendlify SFDC validation exception messages
    – cropredy
    Jul 24, 2013 at 1:37
  • Is that posted anywhere? Would love to take a peek at that Jul 24, 2013 at 14:54
  • any chance you could share a gist with your utility class? Jul 31, 2013 at 16:32

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .