我正在尝试在Websphere服务器上运行世界上最简单的JSF应用程序。该应用程序包含两个xhtml文件和web.xml文件。该应用程序编译,构建和安装没有任何问题。当我尝试在浏览器中查看页面时,我得到:
错误500:java.lang.StackOverflowError
页面和日志中都没有显示任何内容。我一直在谷歌搜索几个小时但找不到解决方案。
这是我的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上运行。
答案 0 :(得分: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>
坚持在http://localhost:8080/context/page.xhtml这样的网址中使用 .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
- 将Mojarra JAR文件发送到WEB-INF / lib目录
- 将WAR类加载器设置为PARENT_LAST
- 将EAR类加载器设置为PARENT_LAST和APPLICATION
请注意,降级模式意味着您无法使用@Resource或任何JPA注释。如果您认为需要支持,请与IBM代表联系。
请注意,它将处理@PostConstruct和@PreDestroy。
答案 1 :(得分:1)
如果由于某种原因,您需要使用 JSF 1.2 而不是 2.0 ,
您可以尝试将Facelets库添加到项目中。
并将以下内容添加到 faces-config.xml :
<faces-config>
.
.
<application>
<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
</application>
.
.
</faces-config>
现在,您可以在JSF 1.2下使用 .xhtml 代替 .jsp