2013-04-26 3 views
0

У меня есть основной документ со связанным набором документов для обновления, с несколькими полями и полем с расширенным текстом Body. Я могу отображать любые столбцы представлений из обновлений в контроллере повтора, но я хотел бы также отображать поле с расширенным текстом в регуляторе повтора.Отображать Rich Text с изображениями в XPages Repeat Control

Я пробовал несколько подходов, до сих пор ничего не работало.

Я попытался это решение:

rowData.getDocument().getFirstItem("Body").getMIMEEntityAsText() 

и это одна:

rowData.getDocument().getFirstItem("Body").getMIMEEntity().getContentAsText(); 

и это одна:

http://iqjam.net/iqjam/iqjam.nsf/questions/20100914_How_to_Display_a_RichText_fiel.htm

<xp:repeat id="repeat1" rows="30" value="#{view1}" var="row"> 
    <xp:panel> 
     <xp:this.data> 
      <xp:dominoDocument var="doc" action="openDocument" 
       documentId="#{javascript:row.getNoteID()}"> 
      </xp:dominoDocument> 
     </xp:this.data> 
     <xp:inputRichText id="inputRichText1" value="#{doc.ArticleContent}" 
      readonly="true"> 
     </xp:inputRichText> 
    </xp:panel> 
</xp:repeat> 

и это одна:

http://www.ibmpressbooks.com/articles/article.asp?p=1681058&seqNum=4

var nd:NotesDocument = rowData.getDocument(); 
var mime = nd.getMIMEEntity("body"); 
// if it is MIME then you can passthrough as HTML 
if (mime != null) { 
     return mime.getContentAsText(); 
} 
// Otherwise just return the plain text 
else { 
     return nd.getItemValueString("body"); 
} 

Они оба дисплея только те документы только с текстом. Если есть встроенное изображение или смесь изображений и текста, то ничего не отображается.

Я был бы признателен за любые предложения ...

+1

Если вы используете источник данных методы (первый пример кода в вашем вопросе), вам нужно добавить 'ignoreRequestParams =" true "', чтобы гарантировать, что атрибуты 'action' и' documentId' не будут переопределены любыми параметрами строки запроса, присутствующими в URL-адресе. –

+0

Спасибо, Тим! после некоторого faffing вокруг я наконец выяснил что ваш комментарий имел в виду ...Я добавил настройку, и она сработала. – John

+0

Я с Джоном. Не могли бы вы объяснить некоторые строки вашего кода, например. линия CDATA, imagename (вы имели в виду название богатого текстового поля?) и т. д. Спасибо. – user2917887

ответ

3

Так с Тимом ignoreRequestParams="true" добавил, что это работает:

<xp:repeat id="repeat1" rows="30" value="#{view1}" var="row"> 
    <xp:panel> 
     <xp:this.data> 
      <xp:dominoDocument var="doc" action="openDocument" 
       documentId="#{javascript:row.getNoteID()}" 
       ignoreRequestParams="true"> 
      </xp:dominoDocument> 
     </xp:this.data> 
     <xp:inputRichText id="inputRichText1" value="#{doc.ArticleContent}" 
      readonly="true"> 
     </xp:inputRichText> 
    </xp:panel> 
</xp:repeat> 
0

Если у вас есть только текст есть только один мим объект в документе. Но если у вас есть изображения и текст, содержимое хранится как multipart mime. Contenttype будет многочастным.

Затем вам нужно получить объект mime и из этого mimeentity getfirstsibling, и если тип содержимого - это текст, тогда получите это и укажите это.

+0

Я плохо борюсь с этим, у вас есть примеры кода? – John

0

Я не знаю, если это то, что вы ищете, но эй. Это повторное управление, которое я сделал некоторое время назад, которое отображает изображения из поля RichText. Это единственный способ показать изображения, и я провел бесчисленные часы в поисках лучшего решения.

<xp:repeat id="repeat1" rows="30" var="imagename" indexVar="index"> 
     <xp:panel></xp:panel> 
     <xp:this.value><![CDATA[#{javascript:doc.getItemValueArray("imagenames")}]]></xp:this.value> 
     <xp:text escape="false" id="computedField1"> 
     <xp:this.value><![CDATA[#{javascript:var url = "/" + @ReplaceSubstring(database.getFilePath(), "\\", "/") + "/0/" + 
document1.getDocument().getUniversalID() 
url += "/$FILE/" + escape(imagename); 
return "<a dojoType=\"dojox.image.Lightbox\" group=\"group1\" title=\"" + 
imagename + "\" href=\"" + url + "\">" + imagename + "</a><br />"}]]></xp:this.value> 
     </xp:text> 
    </xp:repeat> 
+0

Этот код не работает для меня. Что такое побег (imagename)? Это что-то из библиотеки кодов? Также я пытаюсь загрузить смешанное текстовое поле, я хочу текст, а также любые изображения, поэтому у меня такое чувство, что это не сработает. – John

1

Ok, как писал Фредерик, у вас есть многослойное поле мима, так что вы должны пройти через все ваши записи (текст и изображения).

<xp:text escape="false" id="subContent"> 
             <xp:this.value><![CDATA[#{javascript: 
session.setConvertMIME(false); 
if(level3List != null){ 
var nd:NotesDocument = level3List.getDocument(); 
if(nd != null){ 
try{ 
    requestScope.status = ""; 
    var cItem:NotesRichTextItem = nd.getFirstItem("content"); 
    var mime:NotesMIMEEntity = cItem.getMIMEEntity(); 
    if (mime != null) { 
    // If multipart MIME entity 
    if (mime.getContentType().equals("multipart")) { 
    // Print content of each child entity 
    var child1:NotesMIMEEntity = mime.getFirstChildEntity(); 
    while (child1 != null) { 
    if(child1.getEncoding()==1727){ 
     //gif    
     requestScope.status += 
     "<img src=\"data:image/png;base64," + 
     child1.getContentAsText() + 
     "\"/>"    
     }else{ 
     //plain 
     requestScope.status += 
     child1.getContentAsText() //+ "\n" 
    }   
     var child2:NotesMIMEEntity = child1.getFirstChildEntity(); 
     if (child2 == null) { 
     child2 = child1.getNextSibling(); 
     if (child2 == null) { 
     child2 = child1.getParentEntity(); 
     if (child2 != null) { 
     child2 = child2.getNextSibling(); 
     } 
     } 
     } 
     child1 = child2; 
    } 
     } else { 
    // plain mime no multi 
    requestScope.status = mime.getContentAsText(); 
    } 
    } else { 
    // No mime > plain text 
    requestScope.status = nd.getFirstItem("content").getText(); 
    } 
    // return to display 
    return requestScope.status; 
    }catch(e){ 
    return nd.getFirstItem("content").getText(); 
    }  
    } 
} 
// Restore conversion 
session.setConvertMIME(true);}]]></xp:this.value> 
</xp:text> 

Единственная проблема, с которой я столкнулся в данный момент, заключается в том, что я теряю положение изображений. Они будут отображаться внизу.

Этот код также можно найти похожий на документации IBM

IBM

Смежные вопросы