Visualforce: تحويل العربة العائد إلى Breaks HTML في حقل نص طويل

StackOverflow https://stackoverflow.com/questions/2525707

سؤال

في Salesforce ، إذا كنت أقوم بربط حقل نص في صفحة Visualforce ، فما هي طريقة جيدة لتحويل عوائد النقل في المجال النصية إلى HTML <br/> العلامات؟

على سبيل المثال ، ابدأ من شيء مثل هذا:

<apex:page standardController="Case">
  <apex:pageBlock title="Test">
      <p>{!case.Description}</p>
  </apex:pageBlock>                   
  <apex:detail relatedList="false" />
</apex:page>   

... إذا كان الوصف طويلًا مع عودة الكثير من العربات ، فكيف يمكنني html-effy؟

(أعتقد أن هذا سؤال سهل إلى حد ما ، وأنا متأكد من أنني أستطيع جوجل ، ولكن لجعل مجتمع Salesforce مستمرًا هنا ، أعتقد أننا بحاجة إلى بعض الأسئلة السهلة.)

تحرير: (أضيفت Bounty لمحاولة توليد بعض الإثارة)

هل كانت مفيدة؟

المحلول

جرب هذا:

<apex:outputField value="{!case.Description}"/>

سيؤدي استخدام حقول الإخراج إلى الحفاظ على التنسيق تلقائيًا.

نصائح أخرى

لقد حققت هذا في النهاية مع بعض الكود الطويل.

في وحدة التحكم المخصصة ، أضف طرقًا لإرجاع الحقل بعد البحث يدويًا واستبدال فواصل الخط في الحقل واستبدالها بـ <br/> العلامات:

public string getCaseDescriptionFormatted()
{
    Case c = this.loadCaseFromDatabaseOrWhatever();
    return lineBreaks(c.Description);   
}

private string lineBreaks(string inText)
{
   if (inText == null)
       return '';
   else
       return inText.replaceAll('<','(').replaceAll('>',')').replaceAll('\n','<br/>');
}

ثم في الصفحة ، استخدم Apex: outputext مع excart = "false":

<apex:outputText value="{!CaseDescriptionFormatted}" escape="false" />

لاحظ أن Escape = "false" ضروري لمنع Visualforce من الهروب من علامات HTML. هذا يعني أيضًا أنك تترك نفسك منفتحًا على الهجمات البرمجية التي يمكن أن تكون مضمنة بشكل افتراضي في البيانات. لهذا السبب lineBreaks() FN في وحدة التحكم يحل محل أي أيضًا < و > الشخصيات.

(قد تكون هناك طريقة أفضل لجعل السلسلة آمنة ، والاقتراحات ترحيب)

أجاب Tehnrd أعلاه على السؤال بالنسبة لي.

أقوم بتطوير طريقة عرض مشابهة للحالات المشابهة للمثال المشترك للحسابات. عندما يتعلق الأمر بعرض تعليقات الحالة ، لا يمكنك وضعها فقط في قائمة ذات صلة وبدلاً من ذلك تحتاج إلى تنسيقها باليد. يؤدي استخدام Apex PageBlockTable القياسي إلى جدول معبأ بإحكام لا يمكن قراءته من قبل المستخدمين ، لذلك يتعين علينا القيام بمزيد من الترميز اليدوية. يتيح لي هذا النهج أيضًا استخدام CSS لتنسيق محتويات الجدول. لكن المشكلة كانت تنسيق تعليقات الحالة مع فترات الاستراحات ورسائل البريد الإلكتروني المنسقة. إجابة Tehnrd عملت تماما!

بالنسبة للآخرين ، يوجد الرمز لعرض علامة تبويب مع casecomment المنسقة جنبا إلى جنب مع إجراء لتحرير التعليق.

<apex:tab label="Comments" name="Comments" id="tabComments">
    <apex:form >
        <apex:pageBlock id="commentsPageBlock">
            <apex:pageBlockButtons location="top">
                <apex:commandButton value="Toggle Sort" action="{!RequeryComments}" id="theButton" rerender="commentsPageBlock"></apex:commandButton>
            </apex:pageBlockButtons>
            <table border="0"  class="commentsTable">       
            <tr>
                <th class="commentsActionColumn">Action</th>
                <th class="commentBodyClass">Comments</th>
            </tr>
            <!-- get the case comments from the controller -->
            <apex:repeat value="{!comments}" var="c">
                <tr>
                <td class="commentsActionColumn">
                <!-- open the case comment for edit -->
                <apex:outputLink title="" value="/{!c.id}/e?parent_id={!c.parentId}&retURL=/apex/{!$CurrentPage.Name}%3Fid={!case.id}" style="font-weight:bold">Edit</apex:outputLink> 
                </td>
                <td>
                <!-- display the case comment formatted using the apex outputField -->
                <div class="commentTdClass">
                <apex:outputField value="{!c.commentbody}"></apex:outputField>
                </div>
                </td>
                </tr>
            </apex:repeat>
            </table>
        </apex:pageBlock>
    </apex:form>
</apex:tab>

هل حاولت استخدام OutputText؟

إذا لم ينجح ذلك في التصويت لفكرتي هنا: https://sites.secure.force.com/ideaexchange/ideaview؟id=08730000000h4xdaa0كما لدي نفس المشكلة عند محاولة إعادة JSON إلى صفحة.

الناس الآخرون يريدون هذه الفكرة https://sites.secure.force.com/ideaexchange/apex/ideaview؟id=08730000000brheaas

بالنسبة لي ، قامت Tehnrd بتسمية ذلك-كنت أحاول عرض "الوصف" في قالب البريد الإلكتروني لإشعار Visualforce ، واختفت جميع CR / LFS وتجمع الخطوط / الفقرات معًا. مما يجعلها قيمة FOUTTIONFIELD تم إصلاحها بالكامل.

يمكنك تجربة شيء مثل:

{!substitute(Case.Description, '\n', '<br/>')}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top