2009-09-28 12 views
0

toujours j'utilise el expressions comme ceci;facettes totalement échapper xml

<h:outputText value="#{bean.value}" escape="true" />; 

et je ne peux pas échapper à XML dans les champs d'entrée:

<h:inputText value="#{bean.value}" /> 

est-il un moyen d'échapper totalement xml dans facelets.

par exemple un paramètre de contexte;

<context-param> 
    <param-name>facelets.ESCAPE_XML</param-name> 
    <param-value>false</param-value> 
</context-param> 
+1

Comment voulez-vous dire "totalement échapper xml"? Je ne suis pas sûr de ce que tu veux faire. BTW, escape = "true" est la valeur par défaut de h: outputText. – Drew

Répondre

0

Remplacer les pour <h:outputText> renderer et commenter la partie où il échappe le texte. Puis enregistrez votre moteur de rendu dans votre faces.config.xml.

Bien sûr, cela ne fonctionnera que si vous utilisez cette balise. Cela ne fonctionnera pas si vous venez de sortir une expression, par exemple #{bean.value}.

Personnellement, je préfère rester avec l'ajout de l'attribut d'échappement.

0

N'a pas essayé mais vous pourriez peut-être utiliser un convertisseur personnalisé comme celui ci-dessous (Convertis \n à <br/>)

import javax.faces.component.UIComponent; 
import javax.faces.context.FacesContext; 
import javax.faces.convert.Converter; 

import org.apache.commons.lang.StringUtils; 

public class BreakLineConverter implements Converter { 

    /** 
    * No conversion required 
    */ 
    public Object getAsObject(FacesContext context, UIComponent component, String value) { 
     return value; 
    } 

    /** 
    * Converts All \r \n \r\n into break 
    */ 
    public String getAsString(FacesContext context, UIComponent component, Object value) {  
     if (null==value || StringUtils.isEmpty((String)value)) 
      return "";  
     String val=value.toString(); 
     //This will take care of Windows and *nix based line separators 
     return val.replaceAll("\r\n", "<br />").replaceAll("\r", "<br />").replaceAll("\n", "<br />"); 
    } 

} 

convertisseur de registre faces-config.xml

<converter> 
    <description>Converts data to be displayed in web format 
    </description> 
    <converter-id>BreakLineConverter</converter-id> 
    <converter-class>comp.web.converter.BreakLineConverter</converter-class> 
</converter> 
0

Les deux h:outputText et h:inputText par défaut déjà échappe aux entités XML. Vous ne pouvez même pas l'éteindre en h:inputText comme vous pouvez le faire en h:outputText. Votre problème se situe ailleurs. Peut-être que votre compréhension/définition de "escape XML" est fausse. En outre, votre exemple <context-param> suggère que vous voulez désactiver XML d'échappement. Vous ne pouvez pas faire cela pour h:inputText parce que votre webapp serait alors enclin pour XSSattacks. Tu ne veux pas avoir ça.