使用TinyMCE将内容保存到Facelet模板中



我正在尝试使用 TinyMCE 和 JSF 2.x 实现一个解决方案。但是,我不确定如何继续(不同的方法)。

我想做什么...

创建具有特定可编辑区域/部分的用户模板(小面文件)有人可以在登录后通过TinyMCE进行编辑。

我不想使用 DB 来存储"可编辑"部分或将它们动态插入 Facelet 模板中。

我这样想着。

  1. 将可编辑的内容加载到TinyMCE中。
  2. 用户更新内容。
  3. 提交时,使用 Java API 验证内容以进行 XML 处理或其他一些 XML/XHTML 解析器。
  4. 阅读 Facelet 模板并将可编辑内容替换为提交的内容。
  5. 将旧的 Facelet 文件替换为新文件并保存。

在进行更改之前,我是否应该使用中间步骤将提交的内容预先保存到 Facelets 文件中?关于如何继续这样做的任何其他想法将不胜感激!

我不想使用 DB 来存储"可编辑"部分或将它们动态插入 Facelet 模板中。

然后,您唯一可行的选择是将它们保存在本地磁盘文件系统中。请注意,您可以也不应该将它们保存在 WAR 的部署文件夹中,而是保存在 WAR 之外。否则,在重新部署甚至简单的服务器重新启动期间,所有更改都会丢失。更重要的是,当服务器配置为在内存中而不是磁盘上扩展 WAR 时,您将无法向其写入文件。

在 WAR 之外保存文件很容易。只需写入此文件上的FileOutputStream

new File("/some/base/path", filename);

让 Facelet 解析来自 WAR 外部的资源需要一个自定义ResourceResolver

public class MyResourceResolver extends ResourceResolver {
    private ResourceResolver parent;
    public MyResourceResolver(ResourceResolver parent) {
        this.parent = parent;
    }
    @Override
    public URL resolveUrl(String path) {
        URL url = parent.resolveUrl(path); // Resolves from WAR.
        if (url == null) {
            url = new File("/some/base/path", path).toURI().toURL();
        }
        return url;
    }
}

这需要在web.xml中注册如下。

<context-param>
    <param-name>javax.faces.FACELETS_RESOURCE_RESOLVER</param-name>
    <param-value>com.example.MyResourceResolver</param-value>
</context-param>

Xhtml 文件默认位于 WAR 中。您可以部署分解的 WAR 并将它们就地保存。但是,重新部署后,您将丢失所有更改。

您可以"破解"JSF以在WAR存档之外查找模板,但这可能很棘手。

你需要坚持使用JSF吗?基于组件的服务器端技术不是最佳选择。对于此类解决方案,我最好使用一些基于模板的控制器优先技术,如Spring MVC或Grails。请注意,在 JSF 中,控制流的是 XHTML 页面。这不仅仅是模板技术。

另请注意,这就是发明CMS系统的原因。

我在一个项目中使用了 richfaces html 编辑器,但我们遇到了几个问题,所以我们决定创建自己的 facelet 标签来加载 apache 提供的 tinymce 文件。像魅力一样工作

相关内容

  • 没有找到相关文章

最新更新