2012-06-13 82 views
2

我有我支持bean中返回的HTML代碼的屬性:後臺bean的屬性,它應該返回一個字符串的HTML代碼返回空字符串

public String getHtmlPrevisualizar() { 
    return "<html><head><title></title></head><body>Hello world.</body></html>"; 
} 

我想要做的就是在一個iframe中顯示此HTML代碼。我用javascript做到這一點。這是xhtml頁面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:a4j="http://richfaces.org/a4j" 
     xmlns:rich="http://richfaces.org/rich" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:ui="http://java.sun.com/jsf/facelets"> 

    <f:loadBundle basename="resources" var="msg" /> 
<head> 
    <title>#{msg['pageTitle']}</title> 
</head> 
<body> 
<ui:composition template="/WEB-INF/facelets/templates/sqa/plantilla.xhtml"> 
    <ui:define name="title">#{msg['pageTitle']}</ui:define> 
    <ui:define name="javascript"> 
     <script type="text/javascript"> 
      function showPreview() { 
       var doc = document.getElementById('iframePreview').contentWindow.document; 
       doc.open(); 
       doc.write('#{nuevoEditarEstructura.htmlPrevisualizar}'); 
       doc.close(); 
       return false; 
      } 
      function showPreview2() { 
       var doc = document.getElementById('iframePreview').contentWindow.document; 
       doc.open(); 
       doc.write('<html><head><title></title></head><body>Hello world.</body></html>'); 
       doc.close(); 
       return false; 
      } 
     </script> 
    </ui:define> 
    <ui:define name="content"> 
     <h:form> 
      <a4j:commandLink value="Preview" styleClass="boton" onclick="showPreview();"/> 
      <a4j:commandLink value="Preview2" styleClass="boton" onclick="showPreview2();"/> 
      <br/> 
      <br/> 
      <h:outputText value="#{nuevoEditarEstructura.htmlPrevisualizar}" /> 
      <br/> 
      <br/> 
      #{nuevoEditarEstructura.htmlPrevisualizar} 
      <br/> 
      <br/> 
     </h:form> 
     <iframe id="iframePreview"> 
     </iframe> 
    </ui:define> 
</ui:composition> 
</body> 
</html> 

有兩個commandLinks。第一個從backing bean獲取html代碼,第二個在javascript中使用字符串編寫html代碼。第一個commandLink不起作用。如果我查看頁面的源代碼,則應該從後臺bean返回的值爲空。

我已經從印刷在背襯也豆該屬性的值與此:

 <h:outputText value="#{nuevoEditarEstructura.htmlPrevisualizar}" /> 
     <br/> 
     <br/> 
     #{nuevoEditarEstructura.htmlPrevisualizar} 

但理智最多被示出。我打電話給getHtmlPrevisualizar(),並在eclipse控制檯中打印它的內容,並返回正確的html代碼。

我知道轉義字符和facelets可能存在一些問題,我期望不得不處理html中被轉義的字符,但我什麼也沒得到。

回答

0

設定好escape="false",這是令人尷尬的。問題是支持bean名稱拼寫錯誤,沒有別的。我希望我們能夠得到這樣的警告,而不是隻是默默地失敗。

+0

這應該是您評論底部的修改。 –

+0

@LuiggiMendoza嗯,這是問題的實際答案,這就是爲什麼我寫了答案而不是評論。我想刪除這個問題,但也許如果別人有問題,調用backig bean什麼都不會回退,這個問題可以幫助他們檢查支持bean名稱是否拼寫正確。 – Pablo

3

<h:outputText />標籤組件

<h:outputText value="#{nuevoEditarEstructura.htmlPrevisualizar}" escape="false" /> 
+0

我會在明天工作,但爲什麼會解決這個問題?我沒有得到字符串逃脫,我只是沒有得到任何字符串。 – Pablo

+0

如果最後一個不起作用,請嘗試使用該值創建一個字符串並使用它的getter,這應該這樣做。 –

+0

最後,問題是一個愚蠢的問題:支持bean的名稱拼寫錯誤。謝謝你的幫助。 – Pablo