1 2 Previous Next 15 Replies Latest reply on May 23, 2008 3:32 AM by antoine_h

    RichFaces portlet and h:selectOneMenu

    portletbridgefrankum

      Hello,

      I've been developing a set of portlets for the 2.6.4 Portal Server, and recently am trying to integrate RichFaces components. I have a portlet that renders properly when using static (defined in the xhtml file) menu items, but when I try to read from a managed bean I get the following error (stack trace snipped):

      Cause: javax.portlet.PortletException: Error process faces request
      Message: Error process faces request
      StackTrace:
      
      javax.portlet.PortletException: Error process faces request
       at javax.portlet.faces.GenericFacesPortlet.doFacesDispatch(GenericFacesPortlet.java:303)
       at javax.portlet.faces.GenericFacesPortlet.doView(GenericFacesPortlet.java:263)
       at javax.portlet.GenericPortlet.doDispatch(GenericPortlet.java:133)
       at javax.portlet.faces.GenericFacesPortlet.doDispatch(GenericFacesPortlet.java:244)
      (snip)
       at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
       at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
       at java.lang.Thread.run(Unknown Source)
      javax.portlet.faces.BridgeException: Error processing render lifecycle
       at org.jboss.portletbridge.ExceptionHandlerImpl.processRenderException(ExceptionHandlerImpl.java:59)
       at org.jboss.portletbridge.AjaxPortletBridge.doFacesRequest(AjaxPortletBridge.java:281)
       at javax.portlet.faces.GenericFacesPortlet.doFacesDispatch(GenericFacesPortlet.java:300)
       at javax.portlet.faces.GenericFacesPortlet.doView(GenericFacesPortlet.java:263)
      (snip)
      at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
       at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
       at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
       at java.lang.Thread.run(Unknown Source)
      javax.faces.FacesException: java.lang.IllegalArgumentException: Expected a child component type of UISelectItem/UISelectItems for component type javax.faces.SelectOne(provider). Found null.
       at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:306)
       at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
       at org.jboss.portletbridge.AbstractAjaxBridge.render(AbstractAjaxBridge.java:137)
       at org.jboss.portletbridge.AjaxPortletBridge.renderResponse(AjaxPortletBridge.java:305)
      


      My page looks like this:
      <?xml version="1.0" ?>
      <jsp:root version="2.0" xmlns:jsp="http://java.sun.com/JSP/Page"
       xmlns:f="http://java.sun.com/jsf/core"
       xmlns:h="http://java.sun.com/jsf/html"
       xmlns:rich="http://richfaces.org/rich">
       <jsp:directive.page contentType="text/html" />
       <jsp:output omit-xml-declaration="no" doctype-root-element="html"
       doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
       doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" />
       <f:view>
       <html xmlns="http://www.w3.org/1999/xhtml">
       <head>
       <title>Portlet Input1</title>
       </head>
       <body>
      
       <f:loadBundle var="bundle"
       basename="com.intersoftkk.foo.jsfbeans.resources.i18n.messages" />
      
       <h:form>
       <rich:tabPanel selectedTab="searchList" switchType="client">
      <rich:tab name="preferences" label="prefs">
       <h:panelGrid columns="3">
       <h:panelGroup>
       <h:outputText styleClass="portlet-msg-error" value=" * " />
       <h:outputLabel value="#{bundle.menu_provider}" for="provider" />
       </h:panelGroup>
       <h:selectOneMenu id="provider"> <!--
       value="#{tableDataBean.providerId}">
       -->
       <f:selectItems value="#{testBean.items}" />
      
       <f:selectItem itemLabel="aa" itemValue="aa"/>
       </h:selectOneMenu>
       <h:message for="provider" styleClass="error-message"
       showSummary="true" showDetail="false" />
      
       <h:panelGroup>
       <h:outputText styleClass="portlet-msg-error" value=" * " />
       <h:outputLabel value="#{bundle.menu_service}"
       for="service" />
       </h:panelGroup>
       <h:selectOneMenu id="service" >
       <f:selectItem itemLabel="bb" itemValue="cc"/>
      
       </h:selectOneMenu>
       <h:message for="service" styleClass="error-message"
       showSummary="true" showDetail="false" />
      
       </h:panelGrid>
      </rich:tab>
      <rich:tab name="searchList" label="search">
       <span style="text-align: right"> <h:commandButton id="display"
       action="displayValues" value="#{bundle.DISPLAY_PROMPT}"
       styleClass="portlet-form-button" /> </span>
      </rich:tab>
      </rich:tabPanel>
       </h:form>
       </body>
       </html>
       </f:view>
      </jsp:root>
      


      If I comment out the testBean.items line, the page renders.

      The appropriate managed bean method is
       public SelectItem[] getItems() {
       SelectItem[] ret = new SelectItem[1];
       ret[0] = new SelectItem(1,"label");
       return ret;
       }
      


      I'd appreciate any help. The error messages are less than clear, and searching through the forums showed lots of guesswork. The component demo I downloaded doesn't seem to use a selectOneMenu, and I was trying to avoid incorporating Seam if I don't have to (trying to KISS but it's difficult).

      The included libraries in the project include:
      commons-beanutils-core.jar
      commons-digester-1.8.jar
      jsf-facelets.jar
      commons-lang-2.3.jar
      richfaces-impl-3.2.0.GA.jar
      richfaces-ui-3.2.0.GA.jar
      portletbridge-impl-1.0.0B2.jar
      portletbridge-api-1.0.0B2.jar
      commons-collections-3.2.jar
      commons-beanutils-1.7.0.jar
      jsf-facelets-1.1.14.jar

      (and I just realized that I may have collisions with the last two)

      I've tried to write the config files following the wiki's advice. I can include them later if needed. I'd appreciate some advice on the selectOne/selectMany components in the RichFaces context.

      --Richard Frankum


        • 1. Re: RichFaces portlet and h:selectOneMenu
          wesleyhales

          The error is


          javax.faces.FacesException: java.lang.IllegalArgumentException: Expected a child component type of U
          ISelectItem/UISelectItems for component type javax.faces.SelectOne(provider). Found null.
          at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:306)
          at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
          at org.jboss.portletbridge.AbstractAjaxBridge.render(AbstractAjaxBridge.java:137)
          at org.jboss.portletbridge.AjaxPortletBridge.renderResponse(AjaxPortletBridge.java:305)



          What happens when you remove this from the ui:
          <h:selectOneMenu id="provider"> <!--
          value="#{tableDataBean.providerId}">
          -->
          <f:selectItems value="#{testBean.items}" />

          <f:selectItem itemLabel="aa" itemValue="aa"/>
          </h:selectOneMenu>

          I think your problem is with the selectItems.

          • 2. Re: RichFaces portlet and h:selectOneMenu
            portletbridgefrankum

             

            "wesleyhales" wrote:

            What happens when you remove this from the ui:
            <h:selectOneMenu id="provider"> <!--
            value="#{tableDataBean.providerId}">
            -->
            <f:selectItems value="#{testBean.items}" />

            <f:selectItem itemLabel="aa" itemValue="aa"/>
            </h:selectOneMenu>

            I think your problem is with the selectItems.


            I thought so too, but here's the strange behavior:
            1) the tab panel works and the second dropdown works as expected when the entire "aa" dropdown is deleted.
            2) the tab panel works and the dropdowns work as expected when the static selectItem ("aa") is used.
            3) the quoted error appears when testBean.items is used, whether or not it is the only selectItem(s) in the menu.

            I tried changing the testBean method today but I keep getting BridgeExceptions:
            Caused by: javax.portlet.faces.BridgeException: Error processing render lifecycle
             at org.jboss.portletbridge.ExceptionHandlerImpl.processRenderException(ExceptionHandlerImpl.java:59)
             at org.jboss.portletbridge.AjaxPortletBridge.doFacesRequest(AjaxPortletBridge.java:281)
             at javax.portlet.faces.GenericFacesPortlet.doFacesDispatch(GenericFacesPortlet.java:300)
             ... 218 more
            Caused by: javax.faces.FacesException: java.lang.NullPointerException
             at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:306)
             at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
             at org.jboss.portletbridge.AbstractAjaxBridge.render(AbstractAjaxBridge.java:137)
             at org.jboss.portletbridge.AjaxPortletBridge.renderResponse(AjaxPortletBridge.java:305)
             at org.jboss.portletbridge.AjaxPortletBridge.doFacesRequest(AjaxPortletBridge.java:209)
             ... 219 more
            Caused by: java.lang.NullPointerException
             at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOption(MenuRenderer.java:580)
             at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOptions(MenuRenderer.java:757)
             at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:811)
             at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:335)
             at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:836)
             at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:279)


            As I understand it, the bean method should return a single SelectItem for an <f:selectItem> and an array for the <f:selectItems> but they don't seem to be recognized by the bridge. Should I be using UISelectItem instead?

            • 3. Re: RichFaces portlet and h:selectOneMenu
              rusbob

              Hi!
              1.
              <a4j:portlet xmlns="http://www.w3.org/1999/xhtml"
              xmlns:jsp="http://java.sun.com/JSP/Page" version="1.2"
              xmlns:f="http://java.sun.com/jsf/core"
              xmlns:ui="http://java.sun.com/jsf/facelets"
              xmlns:h="http://java.sun.com/jsf/html"
              xmlns:a4j="http://richfaces.org/a4j"
              xmlns:rich="http://richfaces.org/rich">
              2. In page :
              <h:selectOneRadio
              valueChangeListener="#{triggerFormBean.disableChildcomponents}"
              id="typeTr" value="#{triggerFormBean.selectedTab}"
              >
              <f:selectItem itemLabel="Once" itemValue="once"/>
              <f:selectItem itemLabel="Day interval" itemValue="delay"/>
              <f:selectItem itemLabel="Periodic execution" itemValue="periodic"/>

              </h:selectOneRadio>
              3. In bean
              public String getSelectedTab() {
              if (selectedTab==null) selectedTab="once";
              return selectedTab;
              }

              public void setSelectedTab(String selectedTab) {
              this.selectedTab = selectedTab;
              }

              • 4. Re: RichFaces portlet and h:selectOneMenu
                portletbridgefrankum

                 

                "rusbob" wrote:
                Hi!
                <h:selectOneRadio
                valueChangeListener="#{triggerFormBean.disableChildcomponents}"
                id="typeTr" value="#{triggerFormBean.selectedTab}"
                >


                This is not at all what I'm asking about. Can you give some more explanation why you think it's relevant?

                --Richard Frankum

                • 5. Re: RichFaces portlet and h:selectOneMenu
                  rusbob

                  It is a strange component. I spent two days to understand with this component. Also it seems to me that he is not recognized a bridge.
                  Although i am get need class of component
                  public void disableChildcomponents(ValueChangeEvent e){
                  System.err.println(" class component - "+e.getComponent().getClass());

                  This expression did not work

                  if( e.getComponent().getClass().equals(
                  javax.faces.component.html.HtmlSelectOneRadio.class) &&
                  e.getComponent().getParent().getId().equals("typeTr")
                  ){
                  :-(

                  • 6. Re: RichFaces portlet and h:selectOneMenu
                    portletbridgefrankum

                    A slight update: I changed the managed bean method to explicitly define the UISelectItem.

                    public UISelectItem[] getItems() {
                     System.out.println("*** getItems()");
                     UISelectItem[] ret = new UISelectItem[1];
                     UISelectItem tempItem = new UISelectItem();
                     tempItem.setItemLabel("test1");
                     tempItem.setItemValue("aaa");
                     ret[0] = tempItem;
                     return ret;
                     }


                    Now it gives a simple NullPointerException. It looks more like a lifecycle error, so I wonder if my XML configurations are wrong.

                    16:56:50,843 ERROR [STDERR] 2008/05/13 16:56:50 com.sun.facelets.FaceletViewHandler handleRenderException
                    „: Error Rendering View[/pages/tabledata/input.xhtml]
                    java.lang.NullPointerException
                     at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOption(MenuRenderer.java:580)
                     at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOptions(MenuRenderer.java:757)
                     at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:811)
                     at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:335)
                     at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:836)
                     at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:279)
                    [snip...]
                     at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654)
                     at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:557)
                     at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:481)
                     at org.jboss.portal.web
                    16:56:50,859 ERROR [STDERR] .command.CommandServlet.include(CommandServlet.java:80)
                     at org.jboss.portal.web.command.CommandDispatcher.include(CommandDispatcher.java:50)
                     at org.jboss.portal.web.jboss.JBossWebContext.include(JBossWebContext.java:66)
                     at org.jboss.portal.web.ServletContainer.include(ServletContainer.java:182)
                     at org.jboss.portal.portlet.impl.spi.AbstractRequestContext.dispatch(AbstractRequestContext.java:81)
                     at org.jboss.portal.portlet.aspects.portlet.ContextDispatcherInterceptor.invoke(ContextDispatcherInterceptor.java:76)
                     at org.jboss.portal.portlet.invocation.PortletInterceptor.invoke(PortletInterceptor.java:38)
                    [snip...]
                     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
                     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
                     at java.lang.Thread.run(Unknown Source)
                    16:56:50,890 WARN [lifecycle] executePhase(RENDER_RESPONSE 6,org.jboss.portletbridge.context.FacesContextImpl@1164a3b)
                    threw exception
                    java.lang.NullPointerException
                     at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOption(MenuRenderer.java:580)
                     at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOptions(MenuRenderer.java:757)
                     at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:811)
                     at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:335)
                     at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:836)
                    [snip...]
                     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
                     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
                     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
                     at java.lang.Thread.run(Unknown Source)
                    16:56:50,890 ERROR [AjaxPortletBridge] Error processing execute lifecycle
                    javax.faces.FacesException: java.lang.NullPointerException
                     at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:306)
                     at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
                     at org.jboss.portletbridge.AbstractAjaxBridge.render(AbstractAjaxBridge.java:137)
                     at org.jboss.portletbridge.AjaxPortletBridge.renderResponse(AjaxPortletBridge.java:305)
                    


                    Any suggestions on what I should look for?
                    --Richard Frankum

                    • 7. Re: RichFaces portlet and h:selectOneMenu
                      wesleyhales

                      remove markup from your xhtml until you have narrowed down the markup/component/EL that is causing this problem.

                      • 8. Re: RichFaces portlet and h:selectOneMenu
                        portletbridgefrankum

                         

                        "wesleyhales" wrote:
                        remove markup from your xhtml until you have narrowed down the markup/component/EL that is causing this problem.


                        Well, I've been working on it. Can you give me an idea what the difference is between a "SelectItem" and a "UISelectItem"? Are these classes overridden in the portlet bridge jarfile?

                        Given this in my managed bean:
                        import javax.faces.component.UISelectItem;
                        import javax.faces.model.SelectItem;
                         public UISelectItem getItems() {
                         UISelectItem[] ret = new UISelectItem[1];
                         UISelectItem tempItem = new UISelectItem();
                         tempItem.setItemLabel("test1");
                         tempItem.setItemValue("aaa");
                         ret[0] = tempItem;
                         return tempItem;
                         }
                        

                        (and I realize that the name is misleading, I'm intending to return a List later)

                        And the xhtml including:
                         <rich:tabPanel selectedTab="searchList" switchType="client">
                         <rich:tab name="preferences" label="prefs">
                         <h:panelGrid columns="3">
                         <h:selectOneMenu id="certification">
                         <f:selectItem value="#{testBean.items}" />
                         </h:selectOneMenu>
                         </h:panelGrid>
                         </rich:tab>
                        


                        I have two puzzling results, depending on if I use a "f:selectItem" or "f:selectItems". With the singular:
                        javax.faces.FacesException: java.lang.IllegalArgumentException: Argument Error: An option for component certification was not an instance of javax.faces.model.SelectItem. Type found: javax.faces.component.UISelectItem.
                         at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:306)
                         at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
                         at org.jboss.portletbridge.AbstractAjaxBridge.render(AbstractAjaxBridge.java:137)
                         at org.jboss.portletbridge.AjaxPortletBridge.renderResponse(AjaxPortletBridge.java:305)
                         at org.jboss.portletbridge.AjaxPortletBridge.doFacesRequest(AjaxPortletBridge.java:209)
                        


                        With the "selectItems", it's very misleading, and makes me think I may have a classloader problem:
                        javax.faces.FacesException: java.lang.IllegalArgumentException: Expected a child component type of UISelectItem/UISelectItems for component type javax.faces.SelectOne(certification). Found javax.faces.component.UISelectItem.
                         at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:306)
                         at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
                         at org.jboss.portletbridge.AbstractAjaxBridge.render(AbstractAjaxBridge.java:137)
                         at org.jboss.portletbridge.AjaxPortletBridge.renderResponse(AjaxPortletBridge.java:305)
                        


                        Again, any explanation would be appreciated. I'll continue to pare down the xhtml and see if things change. I think the step after that is to see if the RichFaces code works in a regular JSF (non-portlet) page.

                        --Richard Frankum

                        • 9. Re: RichFaces portlet and h:selectOneMenu
                          antoine_h

                          just an idea :
                          you have two jsf-facelets.jar jars in the lib :

                          jsf-facelets.jar and jsf-facelets-1.1.14.jar

                          why ?

                          I have noticed some problems with this jar.

                          I don't put it anymore in the lib folder of the War.
                          I use only one in the lib folder of the global Sar that is around all the war of my portal (my code... not the portal code).

                          I did that after struggling with some wierd bugs, a bit like the one you described.

                          I noticed that the jsf-facelets.jar was in collision with the one provided by the portal (that still uses MyFaces for what I remember).

                          so : I would at most put only one jar (not two different version).
                          and try to put the jar in a upper lib folder (make a try with the server lib folder ?), to see if it works then....

                          hope it helps...

                          • 10. Re: RichFaces portlet and h:selectOneMenu
                            portletbridgefrankum

                             

                            "Antoine_h" wrote:
                            just an idea :
                            you have two jsf-facelets.jar jars in the lib :

                            jsf-facelets.jar and jsf-facelets-1.1.14.jar

                            why ?


                            Inexperience and carelessness, mostly. :)
                            I did say in the first post that I had collisions, so I fixed that early.

                            I was able to fix this problem by changing the method in the managed bean to return a SelectItem list instead of UISelectItem:
                             public List<SelectItem> getItems() {
                             List<SelectItem> l = new ArrayList<SelectItem>();
                             SelectItem tempItem = new SelectItem();
                             tempItem.setLabel("label");
                             tempItem.setValue("value");
                             l.add(tempItem);
                             }
                             return l;
                             }
                            


                            So what I would really like to know is where this error message is from:
                            javax.faces.FacesException: java.lang.IllegalArgumentException: Expected a child component type of UISelectItem/UISelectItems for component type javax.faces.SelectOne(certification). Found javax.faces.component.UISelectItem.
                             at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:306)
                            


                            After I found out I'd been (incorrectly) using UISelectItem, the fix was obvious. But the exception message here is totally misleading. Is it something the portlet bridge should be correcting?

                            --Richard Frankum

                            • 11. Re: RichFaces portlet and h:selectOneMenu
                              wesleyhales

                              This problem doesn't relate to the portlet bridge. UISelectItem is a standard oob component from your JSF lib. Do you have multiple jsf jars on your classpath?
                              Have you tried running this JSF app outside of a portlet environment?
                              It sounds like you almost have it figured out ;)

                              • 12. Re: RichFaces portlet and h:selectOneMenu
                                antoine_h

                                Yes... the message is a bit missleading.

                                may be put some post in the JSF forum of your implementation (Sun RI ?).

                                and make a Jira about it.

                                the message should say : "(like SelectItem...)"

                                ********
                                for your main problem : seems you have resolved it ?

                                no multiple jars
                                use of SelectItem
                                and that's it ?

                                • 13. Re: RichFaces portlet and h:selectOneMenu
                                  portletbridgefrankum

                                   

                                  "wesleyhales" wrote:
                                  This problem doesn't relate to the portlet bridge. UISelectItem is a standard oob component from your JSF lib. Do you have multiple jsf jars on your classpath?
                                  Have you tried running this JSF app outside of a portlet environment?
                                  It sounds like you almost have it figured out ;)


                                  Thanks for the encouragement. I have it working inside a portlet now.
                                  (I didn't actually work on it outside of the portal server. Would be nice, but I don't have the time to experiment now)

                                  The problem wasn't a classpath issue, it was my misreading of the error message. I thought that "Expected a child component type of UISelectItem/UISelectItems" meant that my bean method should return type UISelectItem. But it should actually return a SelectItem. I still don't know the difference between the two class types, though.

                                  --Richard Frankum

                                  • 14. Re: RichFaces portlet and h:selectOneMenu
                                    portletbridgefrankum

                                     

                                    "Antoine_h" wrote:

                                    for your main problem : seems you have resolved it ?

                                    no multiple jars
                                    use of SelectItem
                                    and that's it ?


                                    That's it. I also had some trouble when I tried returning an array (SelectItem[]). The documentation says that the method needs to return a Collection (List). And the error message is, again, not helpful at all.

                                    --Richard Frankum

                                    1 2 Previous Next