2014-02-11 38 views
0

如何在Wicketpanel上使用PageParameters? 我願意從WicketPanel上的文件系統加載圖像,並且我找到了一個教程,但他們使用的是頁面,在我的情況下,我想要將圖像安裝在面板上。我應該在這個類中改變什麼,或者我是否需要爲這個用例實現一個PageClass? 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從WicketPanel傳遞PageParameters

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); 
    } 

} 

感謝

+0

任何人有一個想法? – ZelelB

+0

我是否明白你希望從面板中獲取當前頁面參數? – David

+0

我想在一個面板上安裝一個圖像,這是在另一個面板上安裝的,並且所有這些都安裝在一個頁面上。 但在wicketinaction的教程中,在我發佈的鏈接中,他們告訴在頁面上掛載圖像,我應該實現一個擴展「WebPage」的類(ImageReferencePage)。但在我的情況下,我想要將圖像安裝在面板上,而不是直接放在頁面上。我應該怎麼做?我怎樣才能把這個課程加入我的案子(和小組討論)?我應該通過面板獲取頁面參數還是什麼?感謝您的回答! – ZelelB

回答

0

Got it!我只需要在ImageResourcePanel-Constructor中添加IModel作爲參數。

'公共類ImageResourcesPanel擴展面板{

/** 
* 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); 
} 

}`

0

不能主要參數的面板/頁你把它嵌入你剛剛交出的頁面? 或者您可以使用

RequestCycle.get().getPageParameters() 

,但我認爲隨着從嵌入組件交給這將是清潔的。

1

顯示的示例代碼實際上並不使用WebPage中的pageParameters來完成圖像處理,但是對於圖像還有一個額外的PageParameters imageParameters字段。沒有理由不能在Panel中做同樣的事情。

東西沿着

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) { 
     super(wicketId); 

     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); 
    } 

} 

行應該工作一樣好所示的頁面版本。

我不確定imageParametersimageResourceReference的最終字段是否合適。我可能會在populateItem(ListItem<String> item)方法中使它們成爲局部變量。

更新基於評論:

看來這個例子中產生指向圖像和你想要的是嵌入式圖像。更好的起點可能是wicket-library示例頁面中的images example。然而,來自這個示例的代碼可能與其他示例一起有用。

+0

感謝您的回答!我認爲這是我需要的。但我應該在哪裏給我的圖像的路徑?而不是IMAGE_NAMES(「一」,「二」和「三」)? – ZelelB

+1

如果圖像與示例代碼中的圖像不一致,則可以創建一個方法從其他位置(例如,從數據庫)獲取它們。這個方法可以從這個面板調用,或者方法的結果(一個字符串數組)可以作爲附加參數傳遞給面板的構造函數。 –

+0

用你的答案好得多..但我沒有真正完成!我現在想嘗試使用jpg文件,但我遇到了兩個問題:1)我在面板上顯示鏈接,而不是圖像,2)當我點擊它時,它會讓我進入白頁並且我沒有得到至少在該頁面上顯示的圖像。我試過 'private static final String [] IMAGE_NAMES = new String [] {「C:\\ Users \\ Public \\ Pictures \\ Sample Pictures \\ Desert.jpg」};' 它在瀏覽器中被更改地址標籤到:'THE_PATH_GIVEN_IN_THE_MOUNT_RESOURCE_METHOD/** C:%5CUsers%5CPublic%5CPictures%5CSample%20Pictures%5CDesert.jpg **' – ZelelB