Search code examples
javaimagewicketpanelmount

Passing PageParameters From WicketPanel


How could I use PageParameters on a Wicketpanel? I'm willing to load images from filesystem on a WicketPanel, and I found a tutorial for that, but they are using a Page, and in my case, I want to mount the images on a Panel. What should I change in this class or do I HAVE to implement a PageClass for this usecase? http://wicketinaction.com/2011/07/wicket-1-5-mounting-resources/ https://github.com/martin-g/blogs/blob/master/request-mappers/src/main/java/com/wicketinaction/requestmappers/resources/images/ImageResourcesPage.java

public class ImageResourcesPage extends WebPage {

    /**
     * The image names for which dynamic images will be generated
     */
    private static final String[] IMAGE_NAMES = new String[] {"one", "two", "three"};

    public ImageResourcesPage(final PageParameters parameters) {
        super(parameters);

        final ResourceReference imagesResourceReference = new ImageResourceReference();
        final PageParameters imageParameters = new PageParameters();

        ListView<String> listView = new ListView<String>("list", Arrays.asList(IMAGE_NAMES)) {

            @Override
            protected void populateItem(ListItem<String> item) {
                String imageName = item.getModelObject();
                imageParameters.set("name", imageName);

                // generates nice looking url (the mounted one) to the current image
                CharSequence urlForWordAsImage = getRequestCycle().urlFor(imagesResourceReference, imageParameters);
                ExternalLink link = new ExternalLink("link", urlForWordAsImage.toString());
                link.setBody(Model.of(imageName));
                item.add(link);

            }
        };
        add(listView);
    }

}

Thanks


Solution

  • Got it! I Had just to add the IModel as argument in the ImageResourcePanel-Constructor.

    `public class ImageResourcesPanel extends Panel {

    /**
     * The image names for which dynamic images will be generated
     */
    private static final String[] IMAGE_NAMES = new String[] {"one", "two", "three"};
    
    public ImageResourcesPanel(final String wicketId, IModel<Book> book) {
        super(wicketId, book);
    
         int refNumber = book.getModelObject().getRefNumber();
    
    
        ListView<String> listView = new ListView<String>("list", Arrays.asList(IMAGE_NAMES)) {
    
            @Override
            protected void populateItem(ListItem<String> item) {
    
                String imageName = item.getModelObject();
                imageParameters.set("name", imageName);
                imageParameters.set("ref_number", refNumber);
    
        final ResourceReference imagesResourceReference = new ImageResourceReference();
        final PageParameters imageParameters = new PageParameters();
    
                // generates nice looking url (the mounted one) to the current image
                CharSequence urlForWordAsImage = getRequestCycle().urlFor(imagesResourceReference, imageParameters);
                ExternalLink link = new ExternalLink("link", urlForWordAsImage.toString());
                link.setBody(Model.of(imageName));
                item.add(link);
    
            }
        };
        add(listView);
    }
    

    }`