Jsf 使用TinyMCE将内容保存到Facelets模板中
我试图用TinyMCE和JSF2.x实现一个解决方案。 然而,我不确定如何继续(不同的方法) 我想做的是 创建具有特定可编辑区域/部分的用户模板(Facelets文件) 有人可以在登录后通过TinyMCE进行编辑 我不想使用DB来存储“可编辑”的部分或将它们动态地插入Facelets模板 我在想这样的事Jsf 使用TinyMCE将内容保存到Facelets模板中,jsf,tinymce,facelets,Jsf,Tinymce,Facelets,我试图用TinyMCE和JSF2.x实现一个解决方案。 然而,我不确定如何继续(不同的方法) 我想做的是 创建具有特定可编辑区域/部分的用户模板(Facelets文件) 有人可以在登录后通过TinyMCE进行编辑 我不想使用DB来存储“可编辑”的部分或将它们动态地插入Facelets模板 我在想这样的事 将可编辑内容加载到TinyMCE中 用户更新内容 提交时,使用Java API验证内容以进行XML处理 或者其他一些xml/xhtml解析器 阅读Facelets模板并用提交的内容替换可编辑内容
任何其他关于如何继续进行的想法都将不胜感激 默认情况下,Xhtml文件位于WAR内部。你可以部署爆炸战争并将其保存到位。然而,重新部署后,您将丢失所有更改 您可以“黑客”JSF在WAR归档文件之外寻找模板,但这可能很棘手 你需要坚持使用JSF吗?基于组件的服务器端技术不是最佳选择。对于此类解决方案,我最好使用一些基于模板的控制器优先技术,如SpringMVC或Grails。注意,在JSF中,控制流的是XHTML页面。这不仅仅是模板技术
还请注意,这就是CMS系统被发明的原因。我在一个项目中使用了richfaces html编辑器,但我们遇到了几个问题,因此我们决定创建自己的facelet标记,用于加载apache提供的tinymce文件。很有魅力 我不想使用DB来存储“可编辑”的部分或将它们动态地插入Facelets模板 然后,您唯一可行的选择是将它们保存在本地磁盘文件系统中。请注意,您可以也不应该将它们保存在WAR的deploy文件夹中,而是保存在WAR之外。否则,在重新部署过程中,甚至在简单的服务器重启过程中,所有更改都将丢失。更重要的是,当服务器配置为在内存中而不是在磁盘上扩展WAR时,您将无法向其写入文件 在战争之外保存文件很容易。只需写入此文件上的
FileOutputStream
:
new File("/some/base/path", filename);
让Facelets解析来自外部WAR的资源需要自定义:
公共类MyResourceResolver扩展了ResourceResolver{
私有资源解析器父级;
公共MyResourceResolver(ResourceResolver父级){
this.parent=parent;
}
@凌驾
公共URL解析URL(字符串路径){
URL URL=parent.resolveUrl(路径);//从WAR解析。
如果(url==null){
url=新文件(“/some/base/path”,path).toURI().toul();
}
返回url;
}
}
需要按如下方式在web.xml
中注册
javax.faces.FACELETS\u资源\u解析器
com.example.MyResourceResolver
注意,我知道xhtml文件默认位于WAR内部。我想知道我是否可以使用类似的东西来读取预先保存的xml/xhtml内容并将其呈现出来(虽然它保存在战争之外)。需要坚持使用JSF。只操作基本内容,不操作表单输入字段等。检查/倾听意见:)创建自定义Facelets资源解析程序绝对不是“黑客”或“棘手”。请参阅我的答案。@Dimman如果您不打算让用户使用JSF组件标记,只使用普通HTML-您最好将普通HTML文件从ouside WAR加载到Facelets中的占位符中。想象一下,如果用户可以添加繁重的JSF组件、事件监听器、#{someBean.dosomething()}以及可能最糟糕的JSTL标记,就会出现混乱。同意,只允许HTML内容进入可编辑部分。再次感谢对即将保存的内容进行JAVA XML验证是否明智?(愚蠢的问题,我想是的)。感谢您,我将通过调用ViewDeclarationLanguage\buildView()
来利用Facelets编译器。