2013-11-15 65 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?