【问题标题】:Using TinyMCE to save content into Facelets templates使用 TinyMCE 将内容保存到 Facelets 模板中
【发布时间】:2013-01-16 13:37:43
【问题描述】:

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

我正在尝试做什么......

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

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

我在想这样的事情。

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

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

【问题讨论】:

    标签: jsf tinymce facelets


    【解决方案1】:

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

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

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

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

    让 Facelets 解析来自外部 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>
    

    【讨论】:

    • 对我要保存的内容进行一些 JAVA XML 验证是否明智? (愚蠢的问题,我认为是的)。谢谢
    • 我会通过调用 ViewDeclarationLanguage#buildView() 来使用 Facelets 编译器。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

      • 注意,我知道 xhtml 文件默认位于 WAR 中。我想知道是否可以使用 之类的东西来读取预先保存的 xml/xhtml 内容并呈现它(虽然它保存在 WAR 之外)。需要坚持使用 JSF。只有基本内容将被操作,没有表单输入字段等等。检查/听取意见:)
      • 创建自定义 Facelets 资源解析器绝对不是“hacky”或“棘手”。看我的回答。
      • @Dimman 如果您不打算让用户使用 JSF 组件标签,只能使用纯 HTML - 您最好将纯 HTML 文件从 ouside WAR 加载到 Facelets 中的占位符中。想象一下,如果用户可以添加繁重的 JSF 组件、事件侦听器、#{someBean.dosomething()} 以及可能是最糟糕的 JSTL 标记。
      • 同意,只允许 HTML 内容进入可编辑部分。再次感谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      • 2013-07-20
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      相关资源
      最近更新 更多