1

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

我正在尝试做的...

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

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

我在想这样的事情。

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

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

4

3 回答 3

2

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

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

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

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>
于 2013-02-01T11:15:10.857 回答
1

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

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

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

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

于 2013-02-01T09:21:05.977 回答
0

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

于 2013-02-01T10:45:00.853 回答