JSF + Liferay:无法将参数从一个 bean 发送到另一个
JSF + Liferay: Cannot send parameters from a bean to another
我已经尝试了所有的方法,没有任何效果,在目的地@PostConstruct
参数是空的。
我正在发送从 BeanA 到页面(由 BeanB 支持)的重定向,并尝试从 BeanB 中提取参数。要求是不要将参数添加到 URL.
我尝试了所有方法:
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("userId", userId);
@SessionScoped
豆子,
ec.getFlash().put("userId", userId);
有什么建议吗?
我正在重定向:
FacesContext facesContext = FacesContext.getCurrentInstance();
facesContext.getExternalContext().redirect(url);
将您的参数附加到字符串 URL 中作为 queryString,如下所示:
String url = "/your-link" + "?param1=" + paramValue;
FacesContext facesContext = FacesContext.getCurrentInstance();
facesContext.getExternalContext().redirect(url);
这里 "/your-link"
是您的页面 link,paramValue
是 bean 的一些静态/动态值。在第二个 bean 的初始化中,您可以从 HttpServletRequest
对象中提取参数,如下所示:
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
HttpServletRequest request = (HttpServletRequest)
(externalContext.getRequestMap().get("com.liferay.portal.kernel.servlet.PortletServletRequest"));
PortletRequest portletRequest = (PortletRequest) request.getAttribute("javax.portlet.request");
HttpServletRequest httpServletRequest = null;
String param1 = null;
if(portletRequest != null){
httpServletRequest = PortalUtil.getOriginalServletRequest(PortalUtil.getHttpServletRequest(portletRequest));
param1 = httpReq.getParameter("param1");
}
如果 request.getParmeter
找不到参数,请尝试从 request.getQueryString()
中提取它。
Portlet API 知道两个会话范围:PORTLET_SCOPE
和 APPLICATION_SCOPE
默认网桥将会话映射中的所有属性映射到 PORTLET_SCOPE
,这意味着这些属性仅对 portlet 可见。
如果要写入和读取所有 portlet 的会话属性,则必须使用:
PortletSession session = ((PortletSession) FacesContext.getCurrentInstance().
getExternalContext().getSession(true));
// set
session.setAttribute(attributeName, value, PortletSession.APPLICATION_SCOPE);
// get
Object value = session.getAttribute(attributeName, PortletSession.APPLICATION_SCOPE);
在 XHTML 中,您也可以使用 #{httpSessionScope.attributeName}
。
我已经尝试了所有的方法,没有任何效果,在目的地@PostConstruct
参数是空的。
我正在发送从 BeanA 到页面(由 BeanB 支持)的重定向,并尝试从 BeanB 中提取参数。要求是不要将参数添加到 URL.
我尝试了所有方法:
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("userId", userId);
@SessionScoped
豆子,ec.getFlash().put("userId", userId);
有什么建议吗? 我正在重定向:
FacesContext facesContext = FacesContext.getCurrentInstance();
facesContext.getExternalContext().redirect(url);
将您的参数附加到字符串 URL 中作为 queryString,如下所示:
String url = "/your-link" + "?param1=" + paramValue;
FacesContext facesContext = FacesContext.getCurrentInstance();
facesContext.getExternalContext().redirect(url);
这里 "/your-link"
是您的页面 link,paramValue
是 bean 的一些静态/动态值。在第二个 bean 的初始化中,您可以从 HttpServletRequest
对象中提取参数,如下所示:
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
HttpServletRequest request = (HttpServletRequest)
(externalContext.getRequestMap().get("com.liferay.portal.kernel.servlet.PortletServletRequest"));
PortletRequest portletRequest = (PortletRequest) request.getAttribute("javax.portlet.request");
HttpServletRequest httpServletRequest = null;
String param1 = null;
if(portletRequest != null){
httpServletRequest = PortalUtil.getOriginalServletRequest(PortalUtil.getHttpServletRequest(portletRequest));
param1 = httpReq.getParameter("param1");
}
如果 request.getParmeter
找不到参数,请尝试从 request.getQueryString()
中提取它。
Portlet API 知道两个会话范围:PORTLET_SCOPE
和 APPLICATION_SCOPE
默认网桥将会话映射中的所有属性映射到 PORTLET_SCOPE
,这意味着这些属性仅对 portlet 可见。
如果要写入和读取所有 portlet 的会话属性,则必须使用:
PortletSession session = ((PortletSession) FacesContext.getCurrentInstance().
getExternalContext().getSession(true));
// set
session.setAttribute(attributeName, value, PortletSession.APPLICATION_SCOPE);
// get
Object value = session.getAttribute(attributeName, PortletSession.APPLICATION_SCOPE);
在 XHTML 中,您也可以使用 #{httpSessionScope.attributeName}
。