2012-09-13 71 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