JSF + Liferay:无法将参数从一个 bean 发送到另一个

JSF + Liferay: Cannot send parameters from a bean to another

我已经尝试了所有的方法,没有任何效果,在目的地@PostConstruct参数是空的。

我正在发送从 BeanA 到页面(由 BeanB 支持)的重定向,并尝试从 BeanB 中提取参数。要求是不要将参数添加到 URL.

我尝试了所有方法:

有什么建议吗? 我正在重定向:

 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_SCOPEAPPLICATION_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}