我的环境是RAD 8,WAS 7.0.x,包含许多JSP和Servlet。 该应用程序还使用JAX-RPC和JAX-WS 我想介绍JSF并开始迁移一些更简单的JSP。
我有一个很大的问题,我无法立即迁移到JSF 2.0,因为我的目标是WAS 7.x而且我发现它不支持JSF 2.0。 我与其他商业团体分享WAS 7.x. 所以我现在必须使用JSF 1.2 ..
在RAD 8中,我尝试了以下内容:
从testJSF.jsp文件中,我使用c:redirect到/faces/test1.jsp。 我也试过jsp:转发到/faces/test1.jsp。 Servlet映射具有/ faces / *和* .jsp的url-pattern条目 这次是WAS 7,给了我/test1.jsp没找到...
然后我尝试从testJSF.jsp文件中使用c:redirect到/faces/test1.jsf 我也试过jsp:转发到/faces/test1.jsf。 这次我还改变了Servlet-mapping与/ faces / *和* .jsf的url-pattern条目 这次WAS 7进入无限循环,堆栈溢出。
在这些环境下,servlet-mapping应该是url-pattern,我应该如何引用新的JSF 1.2页面?
答案 0 :(得分:0)
你应该没关系JSF 2.0,因为Websphere 7.0实现了Servlet 2.5规范(据我所见)。
/ faces / *或* .jsf映射应该没问题,其他地方可能存在配置问题......您需要提供更多详细信息。
为什么需要.jsp来测试JSF页面?如果直接从浏览器打开页面会发生什么?
答案 1 :(得分:0)
Servlet-mapping具有/ faces / 和 .jsp
的url-pattern条目
您不应为*.jsp
指定FacesServlet
映射。此模式保留给servlet容器的内置JspServlet
。这样,FacesServlet
永远无法获得正确的JSP文件来呈现视图。
使用/ faces / 和 .jsf的url-pattern条目进行Servlet映射这次WAS 7进入无限循环,堆栈溢出。
您不应该为实际视图文件提供.jsf
扩展名,而是.jsp
扩展名。
正确的设置如下:
单独FacesServlet
上映射*.jsf
。
<servlet>
<servlet-name>facesServlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
您也可以使用/faces/*
或添加它,但这更加丑陋,并且不允许轻松迁移到JSF 2.0。所以不要管它。
视图文件应具有.jsp
扩展名。
viewid.jsp
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<!DOCTYPE html>
<f:view>
<html lang="en">
<head>
<title>JSF 1.2 test page</title>
</head>
<body>
<h:outputText value="If you see this, JSF works!" />
</body>
</html>
</f:view>
不要使用<c:redirect>
或<jsp:forward>
,这没有任何意义。只需通过网址直接调用该页面:
请注意网址中的.jsf
扩展名。这会调用FacesServlet
。然后它会找到viewid.jsp
文件并显示它。