2009-09-28 53 views
0

總是我使用這樣的el表達式;Facelets完全轉義xml

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

,我無法從XML逃脫輸入字段:

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

有沒有辦法在小面到完全逃脫XML。

例如上下文參數;

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

你是指「完全逃脫xml」?我不確定你想要做什麼。 BTW,escape =「true」是h:outputText的默認值。 – Drew

回答

0

重寫渲染<h:outputText>和註釋掉它逃脫文本的部分。然後在您的faces.config.xml中註冊您的渲染器。

當然,如果您使用該標籤,這將僅適用。如果你只輸出一個表達式,例如#{bean.value},它將不起作用。我個人更喜歡不得不添加escape屬性。

0

還沒有嘗試過,但你也許可以使用像一個波紋管自定義轉換(轉換\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 />"); 
    } 

} 

註冊轉換器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

無論是h:outputTexth:inputText默認情況下已經轉義XML實體。您甚至不能像在h:outputText中那樣在h:inputText中關閉它。你的問題在別的地方。也許你對「轉義XML」的理解/定義是錯誤的。另外,您的<context-param>示例建議您要禁用 XML轉義。你不能這樣做的h:inputText因爲你的web應用程序然後將傾向於XSSattacks。你不想那樣做。