2013-11-15 64 views
1

我有一個屬性,它可能包含\n個字符。如果屬性包含\n,我想檢查JSF組件的rendered屬性,如果是,則不要呈現組件。我怎樣才能做到這一點?檢查渲染屬性「 n」或其他特殊字符字符

+1

您認爲這是正確的解決方案的功能要求是什麼?你想用這些信息做什麼? – BalusC

+0

我正在使用

+0

好吧,我澄清了這個問題。你目前的嘗試失敗了多少?似乎它應該工作得很好。不過,知道爲什麼你不想渲染會很有趣。我不能想到真正的世界設備這個檢查,所以也許你仍然在尋找解決方案的錯誤方向。 – BalusC

回答

1

實際上這些值在數據庫中保存爲空,但它在服務端以「\ n \ n」值出現。

前提是你的意思是,\n代表唯一的價值,那麼你可以使用fn:trim()了點。

<h:outputText value="#{bean.value}" rendered="#{not empty fn:trim(bean.value)}" /> 

或者,創建一個轉換器,它立即修剪提交值模型之前獲得污染與不需要的字符:

<h:inputTextarea value="#{bean.value}" converter="trimConverter" /> 
@FacesConverter("trimConverter") 
public class TrimConverter implements Converter { 

    @Override 
    public Object getAsObject(FacesContext context, UIComponent component, String submittedValue) { 
     String trimmed = (submittedValue != null) ? submittedValue.trim() : null; 
     return (trimmed == null || trimmed.isEmpty()) ? null : trimmed; 
    } 

    @Override 
    public String getAsString(FacesContext context, UIComponent component, Object modelValue) { 
     return (modelValue != null) ? modelValue.toString() : ""; 
    } 

} 

,然後就去做

<h:outputText value="#{bean.value}" rendered="#{not empty bean.value}" /> 

由方式,在您指定的評論escape="false"。如果這個輸入是通過<textarea>來自最終用戶,請注意您在這裏打開一個巨大的XSS攻擊漏洞。另請參閱How to implement a possibility for user to post some html-formatted data in a safe way?