我有类似于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中输入了物种的记录,我们想要链接它们。 我知道的唯一解决方案是在具有表格的表单中使用具有复杂代码的select对象。我认为使用GenericValueEncoder。
<td><t:label for="species"/></td><td><t:selectObject t:id="species" blankOption="never" list="speciesList" value="species" labelField="literal:name"/></td>
当然,selectobject可以正常工作,但与每个输入物种的palette或循环复选框(在我的版本中不可用)相比,它真的很慢。
然而,主要问题仍然是我不了解调色板java代码。 许多变量都有下划线,谁知道什么?
由于任何地方都没有评论, 很难理解什么是什么, 但我认为我需要改变第14行。
使用GenericValueEncoder而不是EnumValueEncoder 和GenericSelectModel而不是EnumSelectModel。
如果有人设法用实体对象实现调色板,请告诉我该怎么做?
答案 0 :(得分:1)
这是我们使用它时调色板的一个例子。如果我使用Account,您可以将其替换为您的物种。
@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 .....
}