2010-02-28 17 views
8

Tengo un método en mi bean administrado que devuelve javascript como una cadena. Cuando se invoca el método desde la etiqueta head, funciona bien. Pero cuando se invoca desde body, el navegador en lugar de representar el javascript lo escribe tal como está. ¿Cual puede ser el problema?¿Cómo devuelvo HTML del bean gestionado en JSF?

En mi página JSF cuando hago #{IndexBean.EastRegionGadgets} en head funciona bien pero no en body. Muestra el HTML tal como es. Aquí está el código:

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; 

    } 


} 

Respuesta

18

En mi página JSF cuando lo hago #{IndexBean.EastRegionGadgets} en head funciona bien, pero no lo hace en body. Muestra el HTML tal como es.

supongo que está utilizando <h:outputText> en body para dar salida al HTML. Según el documentation, escapa de forma predeterminada de HTML. Debe establecer su atributo escape en false.

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

En realidad, yo no estaba usando nada. Acabo de escribir # {bean.html} en el cuerpo y escribí todo en HTML. Sin embargo, ¡la misma línea funcionó bien en la etiqueta principal! – TCM

+0

Ah sí, estás usando Facelets. – BalusC

+0

Sí, estoy usando Facelets. ¿Debo usar obligatoriamente este outputText para enviar html? del frijol administrado? – TCM

Cuestiones relacionadas