我已经尝试了所有方法,没有任何效果,在目标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);
答案 0 :(得分:2)
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}
。
答案 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()
中提取参数。