2010-07-07 8 views
13

पर एचटीएमएल कोड कैसे जोड़ूं डिफ़ॉल्ट रूप से, प्रत्येक जेएसएफ FacesMessage एक पंक्ति में प्रस्तुत किया जाता है। मैं स्वयं संदेश में एक HTML लाइन ब्रेक <br /> जोड़ना चाहता हूं, ताकि संदेश अच्छी तरह से दिखाया जा सके। मैं इसे नीचेमैं जेएसएफ फेस मैसेज

message = new FacesMessage("test<br/>test"); 

तरह की कोशिश की हालांकि, यह JSF सहायता से निकले हो गया और के रूप में शाब्दिक पाठ दिखाया गया है। मैं बचने के बिना FacesMessage पर HTML कोड कैसे जोड़ सकता हूं?

+0

क्या यह वही प्रश्न नहीं है जैसे http://stackoverflow.com/questions/3186659/showing-the-jsf-error-messages? – pakore

उत्तर

25

सिद्धांत रूप में, आप h:messages घटक h:outputText की तरह है के लिए एक escape विशेषता चाहते हैं। आप अकेले नहीं हैं जो इसे चाहते हैं, यह अक्सर से अधिक से पहले अनुरोध किया जाता है, लेकिन यह जेएसएफ लोगों के अनुसार एक WONTFIX है।

  1. उपयोग \n<br> के बजाय और उसके अनुसार CSS लागू कर (सबसे आसान):

    आप कई विकल्प हैं।

    #messages td { white-space: pre; } 
    
  2. बनाएँ custom renderer जो MessageRenderer फैली (थोड़ा मुश्किल है, लेकिन अच्छा होगा यदि आप और अधिक एचटीएमएल केवल लाइनब्रेक से कवर करना चाहते हैं)। जब आप पहले से ही JSP के बजाय Facelets का उपयोग कर रहे <ui:repeat> का उपयोग कर

  3. एक सेम में कुछ List में संदेश अपने आप को इकट्ठा और <t:dataList> का उपयोग कर उन्हें प्रदर्शित करते हैं, या। व्यक्तिगत संदेश प्रदर्शित करने के लिए आप <h:outputText escape="false"> का उपयोग कर सकते हैं।

  4. या, जब आप पहले से ही जेएसएफ 2.0 पर हैं, तो बस FacesContext#getMessageList() से अधिक सक्रिय करें। प्रत्येक आइटम आपको FacesMessage देता है जो बदले में कई गेटर्स प्रदान करता है। फिर आप <h:outputText escape"false" /> में सारांश प्रदर्शित कर सकते हैं।

    <ul> 
        <ui:repeat value="#{facesContext.messageList}" var="facesMessage"> 
         <li> 
          <h:outputText value="#{facesMessage.summary}" escape="false" /> 
         </li> 
        </ui:repeat> 
    </ul> 
    
  5. या, जब आप JSF उपयोगिता पुस्तकालय OmniFaces उपयोग कर रहे हैं, का उपयोग अपने <o:messages> component बजाय जो escape विशेषता के लिए समर्थन हासिल है।

    <o:messages escape="false" /> 
    
+1

जब आप जेएसएफ 2 पर हैं।0, आप 'escape =" false "विशेषता के साथ OmniFaces [' 'घटक] (http://showcase.omnifaces.org/components/messages) का भी उपयोग कर सकते हैं। – Adam

+0

@ बालससी क्या आप WONTFIX समस्या को लिंक करना चाहते हैं या नहीं? मुझे यकीन नहीं है। – alexander

0

रूप BalusC अपने पिछले प्रश्न में तुमसे कहा था, संदेश फ़ॉर्मेट करने के लिए एक CSS वर्ग का उपयोग करें:

Showing the JSF Error Messages

3

Primefaces 5.3 FacesMessages पर समर्थन एचटीएमएल, बस messages घटक पर escape="false" की स्थापना:

<p:messages escape="false"/> 
2

मैं this ब्लॉग का पालन किया।

StringBuilder sb = new StringBuilder("<html><body>"); 
sb.append("<p>A list of messages are:</p>"); 
for(String str : listMessages){ 
     sb.append("Message: ").append(str).append("<br/>"); 
} 
sb.append("</body></html>"); 

FacesMessage message = new FacesMessage(sb.toString()); 
message.setSeverity(FacesMessage.SEVERITY_INFO); 
FacesContext.getCurrentInstance().addMessage("", message); 

कुंजी <html> और <body> टैग याद आती है और उन्हें एक वैध HTML ठीक तरह से बंद करने के लिए नहीं है। अन्यथा एचटीएमएल टैग संवाद पर पाठ के रूप में दिखाई देते हैं।