在WEB项目里面有时会需要文本编辑器,比如博客,论坛等,在ADF框架中自带了文本编辑器组件(RichTextEditor),下面简单介绍一下如何使用ADF自带的文本编辑器;
使用:
比如建立一个很简单的帖子的vo,把该vo拖到页面已form的形式显示,并且把帖子内容属性改为以文本编辑器显示:
<af:richTextEditor value="#{bindings.TopicContent.inputValue}" shortDesc="#{bindings.TopicContent.hints.tooltip}" id="it2" label="内容"> </af:richTextEditor>
运行页面,在文本编辑器里面输入文本,以及添加样式,保存,结果不能保存到数据库中。
原因:
在oracle数据库中,保存大对象一般用BLOB或CLOB类型,而不用varchar,varchar最大好像只能保存4kb,所以上面的例子中的帖子的内容属性是CLOB类型,而不是varchar类型,而这个类型导致保存到数据库不成功。
解决:
增加转化器
1. 增加转化器类:
package view.bean.converter; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.convert.Converter; import javax.faces.convert.ConverterException; import oracle.jbo.domain.ClobDomain; public class ClobConverter implements Converter { public ClobConverter() { } public Object getAsObject(FacesContext context, UIComponent component, String value) { if (context == null || component == null) { throw new NullPointerException("FacesContext and UIComponent can not be null"); } if (value == null) { return null; } try { return new ClobDomain(value); } catch (Exception ex) { final String message = String.format("Unable to convert boolean value /"%s/" into a oracle.jbo.domain.Number", value); throw new ConverterException(message, ex); } } public String getAsString(FacesContext context, UIComponent component, Object value) { if (context == null || component == null) { throw new NullPointerException("FacesContext and UIComponent can not be null"); } return value.toString(); } }
2. 在faces-config.xml文件中配置该类:
<converter> <converter-id>ClobConverter</converter-id> <converter-class>view.bean.converter.ClobConverter</converter-class> </converter>
3. 在页面中的文本编辑器组件的converter属性选择该类型转化器:
<af:richTextEditor value="#{bindings.TopicContent.inputValue}" shortDesc="#{bindings.TopicContent.hints.tooltip}" id="it2" label="内容" converter="ClobConverter"> </af:richTextEditor>
再次运行页面,在文本编辑器里面输入文本以及样式,保存,成功。