2

バッキングBeanに、htmlコードを返すプロパティがあります。

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

私がやりたいのは、このhtmlコードをiframeに表示することです。私はこれを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>

2つのcommandLinkがあります。1つ目はバッキングBeanからhtmlコードを取得し、2つ目はjavascriptの文字列で記述されたhtmlコードを持ちます。最初のcommandLinkは機能しません。ページのソースコードを表示すると、バッキングBeanから返されたはずの値が空になっています。

バッキングBeanのプロパティの値も次のように出力しました。

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

しかし、nothigが表示されます。getHtmlPrevisualizar()Eclipseコンソールでそのコンテンツを呼び出して印刷すると、正しいhtmlコードが返されます。

エスケープされた文字とフェイスレットに問題がある可能性があることを知っています。エスケープされているhtmlの文字を処理する必要があると思っていましたが、何も得られません。

4

2 に答える 2

3

タグコンポーネントescape="false"で設定<h:outputText />

<h:outputText value="#{nuevoEditarEstructura.htmlPrevisualizar}" escape="false" />
于 2012-06-13T19:52:57.423 に答える
0

まあ、これは恥ずかしいです。問題は、バッキング Bean 名のつづりが間違っていたことでした。黙って失敗するのではなく、何らかの警告が表示されることを願っています。

于 2012-06-14T08:08:34.677 に答える