I’ve been working on a force.com app with the requirement that a user must enter a valid email address on a Visualforce page before being able to save a record, but they must also be able to insert the related contact’s email address by clicking a button instead of having to leave the edit page to go find it. That seemed simple enough, but it wasn’t. This is my solution for making a field appear required on a Visualforce page.
In my original Visualforce page, it seemed logical that if I set the recipient email field as required, all would work as expected. However, defining the field as required prevented my custom action in my page controller from firing and entering the email address.
### Original Page Controller
### Original Visualforce Page
In this example, the
fillEmail() action should select the related contact email address, and put the value in the
Recipient_Email__c field so the user can see it.
But it’s not that simple it seems. When the field had the
required="true" attribute set, the action would not fire because all validation is done on the client side and the page never posts back to the server — so the controller action never gets called.
So after some digging and asking for help on the Salesforce discussion boards, the solution was to make the
Recipient_Email__c appear as if it’s required on the page (though it’s really not), and add a new save method to my controller to handle field validation on the server side when the record gets saved.
### New Page Controller
### New Visualforce Page
<apex:pageblocksectionitem /> code to replace the original field. This is how we make the field appear with the “required” bar. A nifty trick that took some digging to discover. Hopefully this post saves someone else the time it took me to figure it out — and me the time when I forget it.
For convenience, here’s a Github Gist with field label & inline help that shows exactly how to make a field appear required on a Visualforce page.