2012-07-18 45 views
0

正在使用JSF 1.2。我正在设置参数如下,通过f:param通过h:commandLink设置的jsp页面中检索参数

<h:commandLink id="sendParam" action="#{myBean.redirectToLogin}" > 
    <f:param name="userData" value="#{myBean.msg}"></f:param> 
</h:commandLink> 

我想检索参数(userData)在其他Web应用程序中的JSP页面。我正在从编写上面代码的Web应用程序中访问该JSP页面(可以说myJSP.jsp)。代码如下,

String link = http://myDomain/myJSP.jsp 
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext(); 
externalContext.redirect(link.trim()); 

最重要的是:当JSP页面被击中时将会创建一个新的会话id。 (这是因为我的web应用程序中有一些其他要求)

我试图通过使用myJSP.jsp中的以下代码来检索参数。

String requestmsg = (String) req.getParameter("userData"); 

但是,这始终为空。

  1. 我对f:param的工作原理是否正确?我的意思是,我们可以在某些jsp页面中检索参数,比如如何尝试?

  2. 如果是这样,创建新会话时参数值是否会丢失?

问候,

回答

0

一个重定向基本上指示浏览器发送一个品牌新的HTTP请求。原来的JSF请求中的请求参数在新的JSP请求中不再可用。您还需要显式传递原始请求参数。

String userData = externalContext.getRequestParameterMap().get("userData"); 
String link = "http://myDomain/myJSP.jsp?userData=" + URLEncoder.encode(userData, "UTF-8"); 
externalContext.redirect(link); 
+0

感谢BalusC。这非常有帮助。 – 2012-07-19 04:32:57

+0

@BalusC ..我有另一种情况。而不是击中myJsp.jsp,这次是击中一个portlet。所以,我的目标将是'http:// myDomain /'。这将调用登录portlet并调用login.jsp。因为,我没有指定URL(类似于'http://myDomain/login.jsp?userData ='),我发现很难检索userData值。我该如何处理这种情况?问候,Vikas – 2012-07-19 04:47:14