2013-04-22 78 views
0

我在嘗試讀取JSF頁面中的屬性文件時從服務器收到HTTP 500錯誤。雖然從類文件中讀取Bundle正在運行。從JSF中的屬性文件訪問資源包osgi bundle webapp

下面是我的Sample webapp的結構,它是Tomcat中的一個osgi包。清單文件中的類路徑是web/WEB-INF/classes。因此,資源包已經存在在類路徑

Sample 
    META-INF ---> MANIFEST.MF 
    web    
     App 
      home.jsp 
     login.jsp 
     index.html 
     WEB-INF 
      web.xml 
      faces-config.xml 
      classes-->myresource.properties 
      lib------>packaged jar 

下面是我回到Home.jsp文件的內容,其存在於樣品/網絡/應用程序目錄。

<f:loadBundle var="bundle" basename="com.obj.colours" /> 
<f:loadBundle var="addonpages" basename="CustomAddonPages" /> 
. 
. 
<h:outputText value='#{brandingBundle["label.ManagementConsole"]}' /> 
<!-- <a href="../CustomReport.faces">Custom Reporting </a> --> 

<!-- below part gives error and i have to use the above hard 
    coded way using anchor tag--> 

<h:commandLink action="#{addonpages.Redirectpage}">    
     <h:outputText value="Custom Reporting"/>    
</h:commandLink> 

屬性文件中包含一行

 Redirectpage=../CustomReport.faces 

來自服務器的錯誤是如下

type Exception report 

message 

description The server encountered an internal error() that prevented it from fulfilling this request. 

exception 

java.lang.RuntimeException: javax.servlet.ServletException: #{addonpages.Redirectpage}: javax.faces.el.MethodNotFoundException: Redirectpage 
com.businessobjects.http.servlet.internal.BundlePathAwareServiceHandler.serviceHelper(BundlePathAwareServiceHandler.java:254) 
com.businessobjects.http.servlet.internal.BundlePathAwareServiceHandler.service(BundlePathAwareServiceHandler.java:197) 
com.businessobjects.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:248) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
org.eclipse.equinox.servletbridge.BridgeServlet.service(BridgeServlet.java:220) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
com.businessobjects.pinger.TimeoutManagerFilter.doFilter(TimeoutManagerFilter.java:159) 

root cause 

javax.servlet.ServletException: #{addonpages.Redirectpage}: javax.faces.el.MethodNotFoundException: Redirectpage 
javax.faces.webapp.FacesServlet.service(FacesServlet.java:225) 
com.businessobjects.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:110) 
com.businessobjects.http.servlet.internal.ServletLastFilterChainElement.service(ServletLastFilterChainElement.java:30) 
com.businessobjects.http.servlet.internal.filter.FilterChainImpl.doFilter(FilterChainImpl.java:46) 
com.businessobjects.webutil.boetrustguard.BOETrustValidateFilter.doFilter(BOETrustValidateFilter.java:45) 
com.businessobjects.http.servlet.internal.FilterRegistration.doFilter(FilterRegistration.java:72) 
com.businessobjects.http.servlet.internal.filter.FilterChainImpl.doFilter(FilterChainImpl.java:43) 
com.businessobjects.webutil.internal.filters.BrowserRenderingModeFilter.doFilter(BrowserRenderingModeFilter.java:20) 
com.businessobjects.http.servlet.internal.FilterRegistration.doFilter(FilterRegistration.java:72) 
com.businessobjects.http.servlet.internal.filter.FilterChainImpl.doFilter(FilterChainImpl.java:43) 
com.businessobjects.webutil.boetrustguard.BOETrustPrepareFilter.doFilter(BOETrustPrepareFilter.java:32) 
com.businessobjects.http.servlet.internal.FilterRegistration.doFilter(FilterRegistration.java:72) 
com.businessobjects.http.servlet.internal.filter.FilterChainImpl.doFilter(FilterChainImpl.java:43) 
com.businessobjects.swd.shared.tracelog.TraceLogScopeFilter.doFilter(TraceLogScopeFilter.java:38) 
com.businessobjects.http.servlet.internal.FilterRegistration.doFilter(FilterRegistration.java:72) 
com.businessobjects.http.servlet.internal.filter.FilterChainImpl.doFilter(FilterChainImpl.java:43) 
com.businessobjects.sdk.actionfilter.WorkflowFilter.doFilter(WorkflowFilter.java:45) 
com.businessobjects.http.servlet.internal.FilterRegistration.doFilter(FilterRegistration.java:72) 
com.businessobjects.http.servlet.internal.filter.FilterChainImpl.doFilter(FilterChainImpl.java:43) 
com.businessobjects.swd.appcontext.RequestInitFilter.doFilter(RequestInitFilter.java:26) 
com.businessobjects.http.servlet.internal.FilterRegistration.doFilter(FilterRegistration.java:72) 
com.businessobjects.http.servlet.internal.filter.FilterChainImpl.doFilter(FilterChainImpl.java:43) 
com.businessobjects.http.servlet.internal.BundlePathAwareServiceHandler.serviceHelper(BundlePathAwareServiceHandler.java:235) 
com.businessobjects.http.servlet.internal.BundlePathAwareServiceHandler.service(BundlePathAwareServiceHandler.java:197) 
com.businessobjects.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:248) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
org.eclipse.equinox.servletbridge.BridgeServlet.service(BridgeServlet.java:220) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
com.businessobjects.pinger.TimeoutManagerFilter.doFilter(TimeoutManagerFilter.java:159) 

root cause 

javax.faces.FacesException: #{addonpages.Redirectpage}: javax.faces.el.MethodNotFoundException: Redirectpage 
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:94) 
javax.faces.component.UICommand.broadcast(UICommand.java:332) 
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:287) 
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:401) 
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:95) 
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:245) 
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:110) 
javax.faces.webapp.FacesServlet.service(FacesServlet.java:213) 
com.businessobjects.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:110) 
com.businessobjects.http.servlet.internal.ServletLastFilterChainElement.service(ServletLastFilterChainElement.java:30) 
com.businessobjects.http.servlet.internal.filter.FilterChainImpl.doFilter(FilterChainImpl.java:46) 
com.businessobjects.webutil.boetrustguard.BOETrustValidateFilter.doFilter(BOETrustValidateFilter.java:45) 
com.businessobjects.http.servlet.internal.FilterRegistration.doFilter(FilterRegistration.java:72) 
com.businessobjects.http.servlet.internal.filter.FilterChainImpl.doFilter(FilterChainImpl.java:43) 
com.businessobjects.webutil.internal.filters.BrowserRenderingModeFilter.doFilter(BrowserRenderingModeFilter.java:20) 
com.businessobjects.http.servlet.internal.FilterRegistration.doFilter(FilterRegistration.java:72) 
com.businessobjects.http.servlet.internal.filter.FilterChainImpl.doFilter(FilterChainImpl.java:43) 
com.businessobjects.webutil.boetrustguard.BOETrustPrepareFilter.doFilter(BOETrustPrepareFilter.java:32) 
com.businessobjects.http.servlet.internal.FilterRegistration.doFilter(FilterRegistration.java:72) 
com.businessobjects.http.servlet.internal.filter.FilterChainImpl.doFilter(FilterChainImpl.java:43) 
com.businessobjects.swd.shared.tracelog.TraceLogScopeFilter.doFilter(TraceLogScopeFilter.java:38) 
com.businessobjects.http.servlet.internal.FilterRegistration.doFilter(FilterRegistration.java:72) 
com.businessobjects.http.servlet.internal.filter.FilterChainImpl.doFilter(FilterChainImpl.java:43) 
com.businessobjects.sdk.actionfilter.WorkflowFilter.doFilter(WorkflowFilter.java:45) 
com.businessobjects.http.servlet.internal.FilterRegistration.doFilter(FilterRegistration.java:72) 
com.businessobjects.http.servlet.internal.filter.FilterChainImpl.doFilter(FilterChainImpl.java:43) 
com.businessobjects.swd.appcontext.RequestInitFilter.doFilter(RequestInitFilter.java:26) 
com.businessobjects.http.servlet.internal.FilterRegistration.doFilter(FilterRegistration.java:72) 
com.businessobjects.http.servlet.internal.filter.FilterChainImpl.doFilter(FilterChainImpl.java:43) 
com.businessobjects.http.servlet.internal.BundlePathAwareServiceHandler.serviceHelper(BundlePathAwareServiceHandler.java:235) 
com.businessobjects.http.servlet.internal.BundlePathAwareServiceHandler.service(BundlePathAwareServiceHandler.java:197) 
com.businessobjects.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:248) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
org.eclipse.equinox.servletbridge.BridgeServlet.service(BridgeServlet.java:220) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
com.businessobjects.pinger.TimeoutManagerFilter.doFilter(TimeoutManagerFilter.java:159) 

root cause 

javax.faces.el.MethodNotFoundException: Redirectpage 
com.sun.faces.el.MethodBindingImpl.method(MethodBindingImpl.java:219) 
com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:144) 
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:92) 
javax.faces.component.UICommand.broadcast(UICommand.java:332) 
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:287) 
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:401) 
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:95) 
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:245) 
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:110) 
javax.faces.webapp.FacesServlet.service(FacesServlet.java:213) 
com.businessobjects.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:110) 
com.businessobjects.http.servlet.internal.ServletLastFilterChainElement.service(ServletLastFilterChainElement.java:30) 
com.businessobjects.http.servlet.internal.filter.FilterChainImpl.doFilter(FilterChainImpl.java:46) 
com.businessobjects.webutil.boetrustguard.BOETrustValidateFilter.doFilter(BOETrustValidateFilter.java:45) 
com.businessobjects.http.servlet.internal.FilterRegistration.doFilter(FilterRegistration.java:72) 
com.businessobjects.http.servlet.internal.filter.FilterChainImpl.doFilter(FilterChainImpl.java:43) 
com.businessobjects.webutil.internal.filters.BrowserRenderingModeFilter.doFilter(BrowserRenderingModeFilter.java:20) 
com.businessobjects.http.servlet.internal.FilterRegistration.doFilter(FilterRegistration.java:72) 
com.businessobjects.http.servlet.internal.filter.FilterChainImpl.doFilter(FilterChainImpl.java:43) 
com.businessobjects.webutil.boetrustguard.BOETrustPrepareFilter.doFilter(BOETrustPrepareFilter.java:32) 
com.businessobjects.http.servlet.internal.FilterRegistration.doFilter(FilterRegistration.java:72) 
com.businessobjects.http.servlet.internal.filter.FilterChainImpl.doFilter(FilterChainImpl.java:43) 
com.businessobjects.swd.shared.tracelog.TraceLogScopeFilter.doFilter(TraceLogScopeFilter.java:38) 
com.businessobjects.http.servlet.internal.FilterRegistration.doFilter(FilterRegistration.java:72) 
com.businessobjects.http.servlet.internal.filter.FilterChainImpl.doFilter(FilterChainImpl.java:43) 
com.businessobjects.sdk.actionfilter.WorkflowFilter.doFilter(WorkflowFilter.java:45) 
com.businessobjects.http.servlet.internal.FilterRegistration.doFilter(FilterRegistration.java:72) 
com.businessobjects.http.servlet.internal.filter.FilterChainImpl.doFilter(FilterChainImpl.java:43) 
com.businessobjects.swd.appcontext.RequestInitFilter.doFilter(RequestInitFilter.java:26) 
com.businessobjects.http.servlet.internal.FilterRegistration.doFilter(FilterRegistration.java:72) 
com.businessobjects.http.servlet.internal.filter.FilterChainImpl.doFilter(FilterChainImpl.java:43) 
com.businessobjects.http.servlet.internal.BundlePathAwareServiceHandler.serviceHelper(BundlePathAwareServiceHandler.java:235) 
com.businessobjects.http.servlet.internal.BundlePathAwareServiceHandler.service(BundlePathAwareServiceHandler.java:197) 
com.businessobjects.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:248) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
org.eclipse.equinox.servletbridge.BridgeServlet.service(BridgeServlet.java:220) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
com.businessobjects.pinger.TimeoutManagerFilter.doFilter(TimeoutManagerFilter.java:159)  

回答

0

因此該類發現你得到一個MethodNotFoundException但該方法不存在。也許該方法必須公開?

+0

感謝您的評論 – 2013-04-24 04:43:01

0

解決方案

我在第一個地方犯了嚴重的錯誤,然後回答我自己的問題真的很抱歉。可能你是專家可能已經猜對了,我告訴你整個頁面源。

It is not possible to use h:commandLink when NOT present inside the form element and i should have used h:outputLink

然而,當我第一次修改了頁面,並使用了commandLink拋出的錯誤是不清晰和巴拉茲回答,我必須充分利用的方法表達了commandLink的action屬性裏面使用。所以我繼續前進,創建了一個我自己的ResourceBundle類,然後在這個資源包中讀取我的.properties,並且仍然面臨同樣的問題。

我試過的下一件事是,而不是修改供應商提供的webapp,我在eclipse中創建了一個示例應用程序,並在那裏進行測試。這一次,Eclipse足夠慷慨地顯示帶有commandLink空間的頁面,顯示該行 - commandLink can only be used when present inside form element

所以現在我使用outputLink並加載.properties文件包,它工作得很好。