检查渲染属性中的“\ n”或其他特殊字符

时间:2013-11-15 13:06:27

标签: jsf

我有一个可能包含\n个字符的属性。如果属性包含rendered,我想检查JSF组件的\n属性,如果是,则不要渲染组件。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

  

实际上这些值在数据库中保存为null,但它在服务端显示为“\ 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?