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

时间:2015-04-29 13:30:00

标签: jsf liferay portlet

我已经尝试了所有方法,没有任何效果,在目标bw.any? { |w| @nick[Regexp.new(Regexp.escape(w))] } 中,参数为空。

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

我尝试了所有方法:

  • @PostConstruct
  • FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("userId", userId); bean,
  • @SessionScoped

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

ec.getFlash().put("userId", userId);

2 个答案:

答案 0 :(得分:2)

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}

答案 1 :(得分:0)

将您的参数作为queryString附加在String URL中,如下所示:

String url = "/your-link" + "?param1=" + paramValue;
FacesContext facesContext = FacesContext.getCurrentInstance();
        facesContext.getExternalContext().redirect(url);

这里"/your-link"是页面链接,paramValue是bean的一些静态/动态值。在第二个bean的init中,您可以从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()中提取参数。