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