首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sitemesh,无法构造工厂: com.opensymphony.module.sitemesh.factory.DefaultFactory:

Sitemesh,无法构造工厂: com.opensymphony.module.sitemesh.factory.DefaultFactory:
EN

Stack Overflow用户
提问于 2015-07-13 08:53:15
回答 4查看 1.7K关注 0票数 4

我在Spring中使用了2.4.2版的SiteMesh

代码语言:javascript
复制
<dependency>
        <groupId>opensymphony</groupId>
        <artifactId>sitemesh</artifactId>
        <version>2.4.2</version>
    </dependency>

我使用名称myApp.war部署我的应用程序,一切都正常工作。我需要部署应用程序myapp##versionApp.war名称,这个名称会出现问题。

错误是

无法构造工厂: com.opensymphony.module.sitemesh.factory.DefaultFactory: com.opensymphony.module.sitemesh.factory.FactoryException:无法读取配置文件:/WEB/sitemesh.xml: java.io.FileNotFoundException:

我发现WEB/目录/文件中存在sitemesh.xml。

你能帮帮我吗?

EN

回答 4

Stack Overflow用户

发布于 2016-07-01 13:34:01

我们在2.4版中也有相同的版本

DefaultFactory将尝试使用ServletContext().getRealPath(),但最终尝试从contexPath读取。我觉得这是个错误。

要解决这个问题,您必须创建自己的工厂,并在web.xml env中设置它

复制代码的DefaultFactory

代码语言:javascript
复制
public class MyFactory extends com.opensymphony.module.sitemesh.factory.BaseFactory {

    public MyFactory () {
        // Do stuff
        // delete every thing that sets the config path or simply set

        String configFile = null;

        // Do stuff
    }
    // Do other stuff
}

您的web.xml将如下所示

代码语言:javascript
复制
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

        <env-entry>
            <env-entry-name>sitemesh.factory</env-entry-name>
            <env-entry-type>java.lang.String</env-entry-type>
            <env-entry-value>my.sitemesh.MyFactory</env-entry-value>
        </env-entry>
票数 2
EN

Stack Overflow用户

发布于 2020-04-06 12:44:04

在为遗留应用程序将Tomcat版本从7升级到9时,我在2.3版中也遇到了同样的问题。

问题是DefaultFactory类上的这两行。

代码语言:javascript
复制
 this.configFileName = config.getServletContext().getInitParameter("sitemesh.configfile");
 .
 .
 .
 .

 is = this.configFile.toURL().openStream();

通过将configFileName在web.xml文件上定义为上下文-param,可以解决文件名问题.

代码语言:javascript
复制
<context-param>
    <param-name>sitemesh.configfile</param-name>
    <param-value>/WEB-INF/sitemesh.xml</param-value>
</context-param>

配置文件流上不推荐的方法使用会导致问题。要解决这个问题,应该编写自定义工厂类。您可以直接复制defaultFactory并替换这一行

代码语言:javascript
复制
 is = this.configFile.toURL().openStream();

有了这个

代码语言:javascript
复制
 is = new FileInputStream(this.configFile);

此更改将解决输入流问题。

我添加的环境条目您可以将您的自定义类添加到sitemesh。这一行应该放在web.xml文件中。

代码语言:javascript
复制
<env-entry>
    <env-entry-name>sitemesh.factory</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>your.custom.factory.SitemeshFactory</env-entry-value>
</env-entry>
票数 0
EN

Stack Overflow用户

发布于 2020-05-29 01:55:31

DefaultFactory.java使用不推荐的File.toURL() API。读取sitemesh.xml文件时出现问题。

请将您的站点版本更新为sitemesh:2.5-亚特兰-11

地点:2.5-亚特兰-11错误修复提交

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31379089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档