2012-01-25 44 views
0

我试图获得在Websphere服务器上运行的世界上最简单的JSF应用程序。该应用程序由两个xhtml文件和web.xml文件组成。该应用程序编译,构建和安装没有任何问题。当我尝试在我的浏览器页面,我得到:错误500:WAS 7中的java.lang.StackOverflowError

错误500:java.lang.StackOverflowError的

闲来无事显示在页面上,也不在日志中。我一直在Google上搜索几个小时,但找不到解决方案。

这里是我的web.xml文件:

<context-param> 
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name> 
    <param-value>.xhtml</param-value> 
</context-param> 

<servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.jsf</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.xhtml</url-pattern> 
</servlet-mapping> 

这里是JSF页面:

<f:view> 
<h:form> 
    <h:panelGrid columns="1"> 
     <h:outputLabel value="Carrier" /> 

     <h:outputLabel value="Item Number: " /> 

     <h:outputLabel value="Postal Code: " /> 

     <h:outputLabel value="Quantity: " /> 

    </h:panelGrid> 

</h:form> 
</f:view> 

这是这样一个简单的程序,我想不通为什么它不会运行。任何帮助是极大的赞赏。

哦,让我添加应用程序在Glassfish和Webspere CE上完美运行,而不是在Websphere Express v7上。当然,我需要它运行在Websphere Express v7上。

回答

2

显然, 实际视图文件不具有 .jspx延长,但延长 .xhtml。因此, FacesServlet将在每次调用自己的无限循环中运行,最终导致内存堆栈溢出。

要解决这个问题,就需要从删除web.xml条目:

<context-param> 
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name> 
    <param-value>.jspx</param-value> 
</context-param> 

默认为.xhtml了。

我也建议删除此映射:

<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.jsf</url-pattern> 
</servlet-mapping> 

棒在URL中使用 .xhtml扩展,像这样 http://localhost:8080/context/page.xhtml


更新:我的错误。 WAS 7确实支持JSF 2.0,而不是而不是。它仅支持JSF 1.2。另请参阅WAS documentation。您需要JSP文件而不是Facelets(XHTML)文件。你也不能利用JSF 2.0的优势。

要让JSF 2.0在WAS 7中工作,您需要自己将其捆绑到webapp的/WEB-INF/lib中,并配置WAS类加载器策略。另请参见this link

即使Websphere 7不正式支持JSF 2.0,也可以使其在降级模式下工作。请按照下面的步骤使它适用于您的Websphere 7版本。

  • 升级到至少7.0.0版本。13
  • 船舶在你的WEB-INF/lib目录
  • 设置WAR类加载器的钻嘴鱼科的JAR文件为PARENT_LAST
  • 将EAR类加载器PARENT_LAST和应用

注降级模式意味着你无法使用@Resource或任何JPA注释。如果您认为您需要支持,请联系您的IBM代表。

注意它会处理@PostConstruct和@PreDestroy。

+0

感谢BalusC下。我有.xhtml作为参数值,并得到相同的错误。在阅读另一个网站上的评论后,我将其改为.jspx。无论我似乎放在context-param/param-value中的值是什么,我仍然会遇到stackoverflow错误。 – user1054606

+0

你的实际文件有什么扩展名? (它应该是'.xhtml')你在'/ WEB-INF/lib'中有哪些JAR? (对于WAS,你实际上应该没有人)你的'faces-config.xml'根声明是怎么样的? (对于JSF 2.0,您需要兼容JSF 2.0) – BalusC

+0

没有jar文件,也没有faces-config.xml。我只是试图让页面显示一些基本的jsf标签。我所有的页面/文件都有.xhtml扩展名。没有处理或逻辑只是一个简单的页面与一些标签。问题是什么?我试过了所有的东西,只要我能告诉我所有的代码都是正确的。 – user1054606

1

如果由于某种原因,你需要使用JSF 1.2,而不是2.0

你可以尝试添加Facelets库项目。

,并添加以下到faces-config.xml中

<faces-config> 
    . 
    . 
    <application> 
     <view-handler>com.sun.facelets.FaceletViewHandler</view-handler> 
    </application> 
    . 
    . 
</faces-config> 

现在你可以使用.xhtml,而不是.JSP JSF 1.2