【问题标题】:parsing HTML with JSF in p:dialog在 p:dialog 中使用 JSF 解析 HTML
【发布时间】:2014-01-19 07:01:53
【问题描述】:

您好,我正在使用带有 JSF 和 javamail 的 GMAIL 等 Web 应用程序工作,我使用 p:dialog 预览电子邮件:https://fbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-prn1/1522023_568308536589120_1043722853_n.jpg

这是 VUE 的代码:

<h:form id="form">  

    <p:growl id="msgs" showDetail="true" />  

    <p:dataTable id="cars" var="message" value="#{mailservice.emails}" >  
  <p:ajax event="rowSelect" update=":form:display" oncomplete="carDialog.show()" />
        <p:column headerText="From" style="width:24%">  
            <h:outputText value="#{message.from}" />  
        </p:column>  

        <p:column headerText="Subject" style="width:24%">  
            <h:outputText value="#{message.subject}" />  
        </p:column>  



        <p:column style="width:4%">  
                <p:commandButton id="selectButton" update=":form:display" oncomplete="carDialog.show()" icon="ui-icon-search" title="View">  
                    <f:setPropertyActionListener value="#{message}" target="#{mailservice.selectedMessage}" />  
            </p:commandButton>  
        </p:column>  

    </p:dataTable>  

    <p:dialog header="Car Detail" widgetVar="carDialog" resizable="false" id="carDlg"  
                showEffect="fade" hideEffect="explode" modal="true">  

        <h:panelGrid id="display" columns="2" cellpadding="4" style="margin:0 auto;">  

            <h:outputText value="Meassage :" />  
            <h:outputText value="#{mailservice.selectedMessage.text}" style="font-weight:bold"/>  

        </h:panelGrid>  

    </p:dialog>  

</h:form>

这是托管 bean 的代码,用于获取 GMAIL 电子邮件并将其存储在 ArrayList 中:

public  ArrayList<Email> getEmails()
    { ArrayList<Email> emails=new ArrayList<Email>();
        try {
            Properties props = System.getProperties();
            props.setProperty("mail.store.protocol", "imap");

            Session session = Session.getDefaultInstance(props, null);

            session.setDebug(true);
            Store store = session.getStore("imaps");
            System.out.println(store.getClass());
            store.connect("imap.gmail.com", Util.getEmail(), Util.getEmailPassword());
            System.out.println(store);

            Folder inbox = store.getFolder("Inbox");
            inbox.open(Folder.READ_WRITE);
            Message messages[] = inbox.getMessages();
            int nb = messages.length;
            int max;
            if(nb>=3)
                max=3;
            else
                max=nb;
            for(int i = nb-1 ;i>=nb-max;i--) {
                Message message = messages[i];
            emails.add(new Email(message.getFrom()[0].toString(), message.getSubject(), message.getContent().toString()));
            }
            inbox.close(true);
            } catch (Exception ex) {
            Logger.getLogger(MailService.class.getName()).log(Level.SEVERE, null, ex);
        }
            return emails;
    }

问题是 html 电子邮件显示电子邮件的代码 html 如下:

https://fbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-prn1/1522023_568308536589120_1043722853_n.jpg

【问题讨论】:

    标签: java html jsf jsf-2 jakarta-mail


    【解决方案1】:

    这是正常行为,h:outputText 默认转义 HTML 标签。

    你必须更换

    <h:outputText value="#{mailservice.selectedMessage.text}" style="font-weight:bold"/>
    

    <h:outputText value="#{mailservice.selectedMessage.text}" style="font-weight:bold" escape="false" />
    

    此时,您的 HTML 将无效,因为您包含的内容中有一个 html 标记。避免这种情况的一种方法是添加iframe

    <iframe id="mailContent" src="about:blank"></iframe>
    <script type="text/javascript">
        var doc = document.getElementById("mailContent").contentWindow.document;
        doc.open();
        doc.write('<h:outputText value="#{mailservice.selectedMessage.text}" escape="false" />');
        doc.close();
    </script>
    

    iframe 的信用:Specifying content of an iframe instead of the src to a page

    更多信息:

    【讨论】:

    • 非常感谢它完美地工作,但我遇到了其他问题.. 消息没有完全显示,因为 p:dialog 没有滚动条来滚动底部所以我如何将滚动条添加到 p:dialog
    • @user3151841 你可以通过添加scrolling="yes" 来使iframe 滚动应该可以解决问题。您还可以使用widthheight 更改其大小。如果它当然符合您的要求,请记住标记为已接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 2014-08-24
    • 2011-09-07
    • 2016-08-27
    • 2013-01-17
    • 2013-04-17
    相关资源
    最近更新 更多