2012-09-13 101 views
1

我有類似的規模biological classification。我正在尋找可以更快地鏈接它們的掛毯組件。 但是我被限制爲tapestry 5.2.6。一對多掛圖掛毯組件

@Entity 
public class Species implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @NonVisual 
    private Long Id; 
    @Basic(optional = false) 
    private String Name; 
    @ManyToOne 
    @NotFound(action = NotFoundAction.IGNORE) 
    private Kingdom kingdom; 
    //getter and setter frod data above 
} 

@Entity 
public class Kingdom implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @NonVisual 
    private Long Id; 
    @Basic(optional = false) 
    private String Name; 
    @OneToMany 
    private Collection<Species> speciesCollection; 
    //getter and setter frod data above 
} 

我們已經進入數據庫1000記錄物種,我們想要鏈接它們。 只有我知道的解決方案使用選擇對象,它具有複雜的代碼,在具有表格的表格中。我認爲使用GenericValueEncoder。

<td><t:label for="species"/></td><td><t:selectObject t:id="species" blankOption="never" list="speciesList" value="species" labelField="literal:name"/></td> 

當然選擇對象的工作但其很慢比較palette或循環複選框(不可用在我的版本),爲每個進入的物種。

但是,主要的問題仍然是,我不明白調色板的Java代碼。 許多變量都有下劃線,誰知道是什麼?

既然有任何地方沒有意見, 其很難理解什麼做什麼, 但我想我需要做變線14

,而不是使用EnumValueEncoder 而GenericSelectModel而不是EnumSelectModel GenericValueEncoder。

如果有人設法用實體對象實現調色板,請告訴我該怎麼做?

+0

喜歡這個,沒有人有一個想法 – nkvnkv

+0

nkvnkv:大多數人從掛毯逃跑,彷彿它是瘟疫。 http://stackoverflow.hewgill.com/questions/130/343/8.html - 這個問題是在SO,但它(不幸)被刪除。 – Augusto

+0

我喜歡tapestry 5.3+爲多對多的實體關係提供了新的易於實現的組件;我同意大多數人從Tapestry逃跑,好像它是瘟疫一樣。它是一門課程,必須學習。 – nkvnkv

回答

1

下面是我們使用它的調色板示例。在我使用帳戶的地方,你可以用你的物種代替它。

@Component(id = "accountsPalette", parameters = { 
     "label=literal:My palette", 
     "selected=selectedAccountsIds", 
     "model=availableAccountIdsModel", 
     "encoder=accountsEncoder"}) 
private Palette accountsPalette; 

public SelectModel getAvailableAccountIdsModel() throws Exception { 

    final List<OptionModel> options = new ArrayList<OptionModel>(); 

    for(Account account : availableAccounts) { 

     options.add(new OptionModelImpl(account.getFullNameSingleType(), account.getId())); 
    } 

    return new AbstractSelectModel() { 

     public List<OptionModel> getOptions() { 
      return options; 
     } 

     public List<OptionGroupModel> getOptionGroups() { 
      return null; 
     } 
    }; 
} 

public ValueEncoder<Long> getAccountsEncoder(){ 
    return new ValueEncoder<Long>() { 

     public String toClient(Long value) { 
      return value.toString(); 
     } 

     public Long toValue(String clientValue) { 
      return Long.parseLong(clientValue); 
     } 
    }; 
} 

public List<Long> getSelectedAccountsIds() { 
    return selectedAccountIds; 
} 

public void setSelectedAccountsIds(List<Long> selectedAccountIds) throws Exception { 
    ..... deal with the selected ids ..... 
} 
+0

你已經做得正確了,但是我已經使用示例http://tawus.wordpress.com/2011/08/24/tapestry53/做了一個清單,因爲教授已經將tapestry version 5.2.6版本移動到5.3.5以下掛毯發展和教師課程。 – nkvnkv