2012-12-30 26 views
0

我有一個ActionListener對JSF按鈕如下,訪問HttpServletRequest的內部的ActionListener

<h:commandButton id="id1" action="#{Mybean.Submit}" value="Click"> 
    <f:actionListener binding="#{Mybean.actionListenerImpl}" type="bean.ActionListenerImpl" /> 
</h:commandButton> 

ActionListener如下實施,

public void processAction(ActionEvent event) throws AbortProcessingException { 
    FacesContext fc = FacesContext.getCurrentInstance(); 
    HttpServletRequest req = (HttpServletRequest)fc.getExternalContext().getRequest(); 
    PortletBackingContext pbc = PortletBackingContext.getPortletBackingContext(req); 
    pbc.fireCustomEvent("test", "test"); 
} 

但這拋出follwing例外:

java.lang.ClassCastException: com.bea.portlet.container.ActionRequestImpl cannot be cast to javax.servlet.http.HttpServletRequest 
    at bean.ActionListenerImpl.processAction(ActionListenerImpl.java:18) 

我需要訪問HttpServletRequest得到PortletBackingContext對象,通過它我可以觸發一個自定義事件。

我使用JSF 1.2在weblogic 10.3.0

+0

你在portlet容器,而不是在servlet容器運行JSF 。爲什麼你期望它返回一個servlet請求而不是一個portlet請求?你最好重新將你的問題重新定義爲「如何在JSF託管bean中獲取PortletBackingContext的當前實例?」而不是詢問如何實現一個不可能的解決方案(當然,假設你不能將Portlet容器明顯改爲像Tomcat/JBoss/Glassfish這樣的servlet容器) – BalusC

+0

但是爲了獲得PortletBackingContext,我們需要p屁股HttpServletRequest作爲參數。是否有任何其他方式從JSF bean獲取PortletBackingContext? –

+0

我通過訪問ActionRequest的「javax.servlet.request」獲得HttpServletRequest。 –

回答

1

我通過訪問「javax.servlet.request ActionRequest裏得到了HttpServletRequest的。

+0

HttpServletRequest Req =(javax.servlet.http.HttpServletRequest)request.getAttribute(「javax.servlet.request」); –