2010-02-28 52 views
8

我有一个方法在我的托管bean中返回javascript作为字符串。当从head标记调用该方法时,它工作正常。但是当它从body被调用时,浏览器而不是渲染javascript就会按原样写入。可能是什么问题?如何从JSF中的托管bean返回HTML?

在我的JSF页面时,我做#{IndexBean.EastRegionGadgets}head它工作正常,但它在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; 

    } 


} 

回答

18

在我的JSF页面,当我在做head#{IndexBean.EastRegionGadgets}工作正常,但它在body没有。它按原样输出HTML。

我想你是在使用body<h:outputText>输出的HTML。根据documentation它默认转义HTML。您需要将其escape属性设置为false

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

其实我没有使用任何东西。我刚刚写了#{bean.html}的正文,并用HTML写了所有内容。但是,同一行在头标上运行良好! – TCM 2010-03-01 02:09:17

+0

啊,是的,你正在使用Facelets。 – BalusC 2010-03-01 02:16:55

+0

是的,我正在使用Facelets。我是否需要强制使用这个outputText来输出html?从托管bean? – TCM 2010-03-01 02:35:05