0

I am getting an HTTP 500 error from server when i try to read the properties file in a JSF page. Reading Bundle from class file is working though.

Below is the structure of my Sample webapp which is an osgi bundle in Tomcat. The class path in manifest file is web/WEB-INF/classes. So the resource bundle is already present in the class path

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

Below is content of my home.jsp file which is present in Sample/web/App directory.

<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>

the properties file contain a single line

      Redirectpage=../CustomReport.faces

The Error from the Server is as below

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)    
Dhirendra Khanka
  • 759
  • 1
  • 8
  • 21

2 Answers2

0

You get a MethodNotFoundException so the class is found but the method does not exist. Maybe the method must be public?

Peter Kriens
  • 15,196
  • 1
  • 37
  • 55
0

Solution

I am really sorry for committing a gross mistake at first place and then answering to my own question. May be you experts might have guessed it correctly had i shown you the entire page source.

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

However when i had first modified the page and used a commandLink the error thrown was not as clear and as Balazs answered i have to make use of method expression for use inside the action attribute of a commandLink. And so i went ahead, creating a ResourceBundle class of my own and then read my .properties inside this resourcebundle, and still i faced the same issue.

The next thing i tried was instead of modifying the vendor provided webapp, i created one sample app in eclipse and tested over there. and this time, Eclipse was generous enough to display the page with the commandLink space showing the line - commandLink can only be used when present inside form element

So now i am using the outputLink and loading the .properties file bundle and it works just fine.

Dhirendra Khanka
  • 759
  • 1
  • 8
  • 21