JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Web Framework » Wicket  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 分享-Populator的應用
prins





發文: 73
積分: 0
於 2007-08-30 12:39 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
資料查詢然後列表,是常見的畫面形式。我在系統大都使用DataGridView搭配CellPopulator使用,其中最常用的PropertyPopulator。當我想繼承它並擴展新功能時發現property變數是private而且沒有get method。所以只好寫個可抓到property變數的BasePropertyPopulator。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public abstract class BasePropertyPopulator implements ICellPopulator {
    private static final long serialVersionUID = 1;
 
    /**
     * 要顯示的屬性名稱
     */
  protected String property;
 
    /**
     * Constructor
     * @param property property whose value will be displayed in the cell. uses wicket's {@link
     * wicket.model.PropertyModel} notation.
     */
    public BasePropertyPopulator(String property) {
        if (property == null) {
            throw new IllegalArgumentException("argument [property] cannot be null");
        }
        this.property = property;
    }
 
    public String getProperty() {
        return property;
    }
 
    public void setProperty(String property) {
        this.property = property;
    }
 
    /**
     * 從rowModel.getObject以及property參數取得property的資料值。
     * @param rowModel
     * @return
     */
    protected Object getPropertyValue(IModel rowModel) {
        Object value = null;
        if (null != rowModel && null != rowModel.getObject(null)) {
            value = PropertyResolver.getValue(property, rowModel.getObject(null));
        }
        return value;
    }
}


當然這只是第一步,接下來我就根據BasePropertPopulator延伸一些功能。
資料裡面常會有狀態、型態或是類別等欄位,通常會用數字來儲存,可是顯示時要以文字方式顯示,Wicket有ChoiceRender可以用來處理文字的顯示。但是如果欄位在DataGridView裡面的話就必須自己做資料轉換了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class ChoiceRendererPropertyPopulator extends BasePropertyPopulator {
    private static final long serialVersionUID = 1;
 
    private IChoiceRenderer choiceRenderer;
 
    /**
     * 使用ChoiceRenderer來轉譯proeprty值成可讀資料
     * @param property 欄位屬性
     * @param choiceRenderer 轉譯property值成可讀資料的renderer. not null.
     */
    public ChoiceRendererPropertyPopulator(String property, IChoiceRenderer choiceRenderer) {
        super(property);
 
        if (null == choiceRenderer) {
            throw new IllegalArgumentException("choiceRenderer is null.");
        }
        this.choiceRenderer = choiceRenderer;
    }
 
    public void populateItem(Item cellItem, String componentId, IModel rowModel) {
        Object object = getPropertyValue(rowModel);
        if (null == object) {
            throw new IllegalArgumentException(getProperty() + " is null.");
        }
 
        String displayStr = String.valueOf(choiceRenderer.getDisplayValue(object));
        cellItem.add(new Label(componentId, new Model(displayStr)));
    }
 
    public IChoiceRenderer getChoiceRenderer() {
        return choiceRenderer;
    }
}


reply to postreply to post
話題樹型展開
人氣 標題 作者 字數 發文時間
2340 分享-Populator的應用 prins 2683 2007-08-30 12:39
» JWorld@TW »  Web Framework » Wicket

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8