【问题标题】:How do I return HTML from managed bean in JSF?如何从 JSF 中的托管 bean 返回 HTML?
【发布时间】:2010-02-28 16:10:37
【问题描述】:

我的托管 bean 中有一种方法将 javascript 作为字符串返回。当从head 标记调用该方法时,它工作正常。但是当从body 调用它时,浏览器不会呈现 javascript,而是按原样编写它。可能是什么问题?

在我的 JSF 页面中,当我在 head 中执行 #{IndexBean.EastRegionGadgets} 时,它工作正常,但在 body 中却不行。它按原样输出 HTML。代码如下:

package BusinessFacade;

import java.util.ArrayList;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.component.html.HtmlOutputText;


enum REGION{
    NORTH,EAST,WEST;
}

class Gadget{
    private String gadgetCode = "";
    private REGION gadgetRegion = REGION.WEST;

    public Gadget(String gadgetCode, REGION gadgetRegion){
        this.gadgetCode = gadgetCode;
        this.gadgetRegion = gadgetRegion;
    }

    public String getGadgetCode() {
        return gadgetCode;
    }

    public void setGadgetCode(String gadgetCode) {
        this.gadgetCode = gadgetCode;
    }

    public REGION getGadgetRegion() {
        return gadgetRegion;
    }

    public void setGadgetRegion(REGION gadgetRegion) {
        this.gadgetRegion = gadgetRegion;
    }

}

@ManagedBean(name="IndexBean")
@RequestScoped
public class IndexBean {
    ArrayList<Gadget> _list;
    public IndexBean() {

    }

    @PostConstruct
    public void initialize(){
        _list = new ArrayList<Gadget>();
        Gadget objGadget = new Gadget("<script type='text/javascript' src='http://cdn.widgetserver.com/syndication/subscriber/InsertWidget.js'></script><script>if (WIDGETBOX) WIDGETBOX.renderWidget('78d12c15-dc87-42f2-a78a-3f62a91a119a');</script><noscript>Get the <a href='http://www.widgetbox.com/widget/crystal-clock'>Crystal Clock</a> widget and many other <a href='http://www.widgetbox.com/'>great free widgets</a> at <a href='http://www.widgetbox.com'>Widgetbox</a>! Not seeing a widget? (<a href='http://docs.widgetbox.com/using-widgets/installing-widgets/why-cant-i-see-my-widget/'>More info</a>)</noscript>",REGION.WEST);
        _list.add(objGadget);

        objGadget = new Gadget("<script type='text/javascript' src='http://cdn.widgetserver.com/syndication/subscriber/InsertWidget.js'></script><script>if (WIDGETBOX) WIDGETBOX.renderWidget('1ccc3dee-8266-4b84-8191-13a4bf584d0c');</script><noscript>Get the <a href='http://www.widgetbox.com/widget/custom-clock'>Shiny Clock</a> widget and many other <a href='http://www.widgetbox.com/'>great free widgets</a> at <a href='http://www.widgetbox.com'>Widgetbox</a>! Not seeing a widget? (<a href='http://docs.widgetbox.com/using-widgets/installing-widgets/why-cant-i-see-my-widget/'>More info</a>)</noscript>",REGION.EAST);
        _list.add(objGadget);



    }

    public String getWestRegionGadgets(){
        HtmlOutputText objHtmlOutputText = new HtmlOutputText();
        String strGadgets = "";
        for(Gadget objGadget:_list ){
            if(objGadget.getGadgetRegion() == REGION.WEST){
                strGadgets += objGadget.getGadgetCode();
            }
        }
        return strGadgets;

    }

    public String getEastRegionGadgets(){

        String strGadgets = "";
        for(Gadget objGadget:_list ){
            if(objGadget.getGadgetRegion() == REGION.EAST){
                strGadgets += objGadget.getGadgetCode();
            }
        }
        return strGadgets;

    }


}

【问题讨论】:

    标签: jsf


    【解决方案1】:

    在我的 JSF 页面中,当我在 head 中执行 #{IndexBean.EastRegionGadgets} 时,它工作正常,但在 body 中却不行。它按原样输出 HTML。

    我想您在body 中使用&lt;h:outputText&gt; 来输出HTML。根据documentation,它默认转义 HTML。您需要将其escape 属性设置为false

    <h:outputText value="#{bean.html}" escape="false" />
    

    【讨论】:

    • 不,实际上我没有使用任何东西。我只是在正文中写了#{bean.html},并在 HTML 中写了所有内容。但是,同一行在 head 标签中运行良好!
    • 啊,是的,您使用的是 Facelets。
    • 是的,我正在使用 Facelets。我是否需要强制使用此 outputText 来输出 html?来自托管 bean?
    • 是的,默认情况下它也会在正文中转义内联 EL。一切只是为了防止 XSS。
    • 我现在必须修复的项目是使用 ,文档声明默认情况下它不会转义 html。它确实逃脱了html。以上工作 - 感谢 BalusC!
    猜你喜欢
    • 2014-10-15
    • 2014-10-15
    • 1970-01-01
    • 2023-03-05
    • 2014-09-29
    • 1970-01-01
    • 2016-07-05
    • 2014-01-27
    • 2012-05-13
    相关资源
    最近更新 更多