Jsf 如何避免constructor召回或纠正?

Jsf 如何避免constructor召回或纠正?,jsf,primefaces,liferay,Jsf,Primefaces,Liferay,我有绝对可行的portlet。它是一个复杂的表单,有许多弹出窗口、懒散的表格、表格等等。它很好用。并希望允许它自动填充所有字段和结构。我从url添加构造函数分析参数: RenderRequest renderRequest = (RenderRequest) (FacesContext .getCurrentInstance() .getExternalContext().getRequestMap().get("javax.portlet.request")

我有绝对可行的portlet。它是一个复杂的表单,有许多弹出窗口、懒散的表格、表格等等。它很好用。并希望允许它自动填充所有字段和结构。我从url添加构造函数分析参数:

RenderRequest renderRequest = (RenderRequest) (FacesContext .getCurrentInstance()  
                .getExternalContext().getRequestMap().get("javax.portlet.request"));   
        String applicationIndex = renderRequest.getParameter("caid");
以及使用数据或默认构造函数初始化结构

当我打开任何弹出窗口时,我看到它们没有数据,或者它们的按钮在单击时没有反应。在日志中:

原因:java.lang.ClassCastException:com.liferay.portlet.ResourceRequestImpl无法转换为javax.portlet.RenderRequest

它发生在第行:

RenderRequest RenderRequest=(RenderRequest)FacesContext.getCurrentInstance.getExternalContext.getRequestMap).get“java
x.portlet.request”)

它是bean构造函数的第一行


所以问题是:如何使构造函数在这种情况下正确工作?

您正在抛出一个
ResourceRequest
,它在门户世界中指向资源生命周期阶段(例如Ajax),但您正在将它抛出到与呈现阶段相关的
RenderRequest

您可能只想使用
PortletRequest
,它是
ResourceRequest
以及
RenderRequest
的超类型