1

私は生物学的分類に似たスケールを持っています。それらをより高速にリンクできるタペストリー コンポーネントを探しています。ただし、タペストリー 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>

確かにselectobjectは機能しますが、入力された種ごとにパレットまたはループチェックボックス(私のバージョンでは利用できません)と比較すると本当に遅いです。

ただし、パレット Java コードを理解していないという主な問題が残っています。多くの変数には下線が付いています。

どこにもコメントがないので、何が何をするのかわかりにくいですが、14行目を変更する必要があると思います。

EnumValueEncoder の代わりに GenericValueEncoder を使用し、EnumSelectModel の代わりに GenericSelectModel を使用します。

エンティティ オブジェクトを使用してパレットを実装できた場合は、どうすればよいか教えてください。

4

1 に答える 1

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 .....
}
于 2012-11-20T08:52:58.890 に答える