newline character on text area

Prady picture Prady · Apr 10, 2012 · Viewed 44.1k times · Source

I have a custom field called Current_Address__c which is of datatype textarea.

I need to populate this field in the format below. ie a newline char after street and another newline after zip.

street City state Zip Country

The values of city state zip country etc are been taken from contact object. I dont want to use this as a formula field. So i need to populate it in my controller and display it on my VF page.

I am trying to add a newline char by using the code below

this.customobj.Current_Address__c = currentStreet + '\\n ' + currentCity + ' ' + currentState  + ' ' + currentZIP  + '\\n ' + currentCountry ;

i had also used \n instead of \n.

It still show the field in one line instead of 3 lines

EDIT

I got this working using the following code. I would accept mathews answer as it would work with outputfield.

                currentAddress = currentStreet;
            currentAddress += '\r\n';
            currentAddress += currentCity + + ' ' + currentState  + ' ' + currentZIP ;
            currentAddress += '\r\n';
            currentAddress += currentCountry;

This works only if you use +=. not sure why this happens

Answer

Matt K picture Matt K · Apr 10, 2012

I think I found the issue, you have two escape character slashes (\\n), but only one is needed because the slash in \n does not need to be escaped in this context.

Also, Salesforce saves a new line as \r\n. Try this:

this.customobj.Current_Address__c 
    = currentStreet + ' \r\n' 
    + currentCity + ' ' + currentState  + ' ' + currentZIP  + ' \r\n' 
    + currentCountry;

This method works when using an <apex:outputfield> with an sObject field.

<apex:outputtext value="{!myCustomSObject__c.Address__c}"/>

If you're using a different Visualforce Component, it won't work. Visualforce renders the new line in HTML when using a <apex:outputtext> Component, but HTML ignores new lines. If you use a <br/> tag, Visualforce renders it as &lt;br/&gt;.

The best solution I could come up with for rendering a variable that has new lines in it (rather than an sObject field) is to use a disabled <apex:inputtextarea>.

<apex:inputtextarea value="{!myAddress}" disabled="true" readonly="true">
</apex:inputtextarea>