Jsf 错误500:WAS 7中的java.lang.StackOverflower错误

Jsf 错误500:WAS 7中的java.lang.StackOverflower错误,jsf,jakarta-ee,websphere,websphere-7,Jsf,Jakarta Ee,Websphere,Websphere 7,我正在尝试在Websphere服务器上运行世界上最简单的JSF应用程序。该应用程序由两个xhtml文件和web.xml文件组成。该应用程序的编译、构建和安装没有任何问题。当我尝试在浏览器中查看页面时,我得到: 错误500:java.lang.StackOverflower错误 页面上和日志中都没有显示其他内容。我在谷歌上搜索了几个小时,但找不到解决办法 这是我的web.xml文件: <context-param> <param-name>javax.faces.D

我正在尝试在Websphere服务器上运行世界上最简单的JSF应用程序。该应用程序由两个xhtml文件和web.xml文件组成。该应用程序的编译、构建和安装没有任何问题。当我尝试在浏览器中查看页面时,我得到:

错误500:java.lang.StackOverflower错误

页面上和日志中都没有显示其他内容。我在谷歌上搜索了几个小时,但找不到解决办法

这是我的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>

javax.faces.DEFAULT_后缀
.xhtml
Facesservlet
javax.faces.webapp.FacesServlet
1.
Facesservlet
*.jsf
Facesservlet
*.xhtml
下面是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和WebPere CE上运行得非常好,只是在WebSphereExpress v7上运行得不好。当然,我需要它在Websphere Express v7上运行。

显然,实际的视图文件没有
.jspx
扩展名,而是
.xhtml
扩展名。因此,
FacesServlet
将在每次调用自身的无限循环中运行,最终导致内存堆栈溢出

要解决此问题,您需要从
web.xml
中删除该条目:

<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.jspx</param-value>
</context-param>
坚持在URL中使用
.xhtml
扩展名,就像这样


更新:我的错误。WAS7根本不支持JSF2.0。它只支持JSF1.2。另见。您需要JSP文件而不是Facelets(XHTML)文件。您也不能利用JSF2.0的优势

要让JSF2.0在WAS7中工作,您需要将其绑定到webapp的
/WEB-INF/lib
,并配置WAS类加载器策略。另见

即使WebSphere7不正式支持JSF2.0,您也可以让它在降级模式下工作。按照以下步骤让它在您的WebSphere7版本上运行

  • 升级至至少7.0.0.13版
  • 在WEB-INF/lib目录中发送Mojara JAR文件
  • 将WAR类加载器设置为PARENT_LAST
  • 将EAR类加载器设置为PARENT_LAST和APPLICATION
注意降级模式意味着您将无法使用@Resource或任何JPA注释。如果您认为需要it支持,请联系IBM代表

注:它将在施工后和施工前进行处理

显然,实际的视图文件没有扩展名
.jspx
,而是扩展名
.xhtml
。因此,
FacesServlet
将在每次调用自身的无限循环中运行,最终导致内存堆栈溢出

要解决此问题,您需要从
web.xml
中删除该条目:

<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.jspx</param-value>
</context-param>
坚持在URL中使用
.xhtml
扩展名,就像这样


更新:我的错误。WAS7根本不支持JSF2.0。它只支持JSF1.2。另见。您需要JSP文件而不是Facelets(XHTML)文件。您也不能利用JSF2.0的优势

要让JSF2.0在WAS7中工作,您需要将其绑定到webapp的
/WEB-INF/lib
,并配置WAS类加载器策略。另见

即使WebSphere7不正式支持JSF2.0,您也可以让它在降级模式下工作。按照以下步骤让它在您的WebSphere7版本上运行

  • 升级至至少7.0.0.13版
  • 在WEB-INF/lib目录中发送Mojara JAR文件
  • 将WAR类加载器设置为PARENT_LAST
  • 将EAR类加载器设置为PARENT_LAST和APPLICATION
注意降级模式意味着您将无法使用@Resource或任何JPA注释。如果您认为需要it支持,请联系IBM代表

注:它将在施工后和施工前进行处理


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

您可以尝试将库添加到项目中

并将以下内容添加到faces config.xml

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

.
.
com.sun.facelets.FaceletViewHandler
.
.

现在,如果出于某种原因,您需要使用jsf1.2而不是2.0,那么您可以在jsf1.2

下使用.xhtml而不是.jsp

您可以尝试将库添加到项目中

并将以下内容添加到faces config.xml

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

.
.
com.sun.facelets.FaceletViewHandler
.
.

现在您可以在JSF1.2下使用.xhtml而不是.jsp,谢谢BalusC。我确实将.xhtml作为参数值,并且得到了相同的错误。在阅读了另一个网站上的评论后,我将其改为.jspx。不管我在上下文param/param值中输入了什么值,我仍然会得到stackoverflow错误。您的实际文件有什么扩展名?(应该是
.xhtml
)您在
/WEB-INF/lib
中有哪些JAR?(因为您实际上应该没有人)您的
faces config.xml
根声明是什么样子的?(对于JSF2.0,您需要一个与JSF2.0兼容的文件)没有jar文件,也没有faces-config.xml。我只是想让页面显示一些基本的jsf标记。我所有的页面/文件都有.xhtml扩展名。没有处理或逻辑,只有一个带有一些标记的简单页面。有什么问题吗?我已经尝试了所有的方法,就我所知,我所有的代码都是正确的。谢谢你。我确实将.xhtml作为参数值,并且得到了相同的错误。在阅读了另一个网站上的评论后,我将其改为.jspx。不管我在上下文param/param value中输入了什么值,我仍然会得到stackoverflow错误