1

オブジェクトの ArrayList を JSF テーブルに表示したい:

このオブジェクトを作成しました:

public List<TData> td = new ArrayList<TData>();

    public class TData {

        private long id;
        private String key;
        private String language;
        private String translation;

        public TData(){};

        public TData(long id, String key, String language, String translation) {
            // super();
            this.id = id;
            this.key = key;
            this.language = language;
            this.translation = translation;
        }

        public long getId() {
            return id;
        }

        public void setId(long id) {
            this.id = id;
        }

        public String getKey() {
            return key;
        }

        public void setKey(String key) {
            this.key = key;
        }

        public String getLanguage() {
            return language;
        }

        public void setLanguage(String language) {
            this.language = language;
        }

        public String getTranslation() {
            return translation;
        }

        public void setTranslation(String translation) {
            this.translation = translation;
        }

    }

    public List<TData> getDataObj() {
        return td;
    }

    @PostConstruct
    public void loadData() {

        String query = "SELECT c FROM TranslationTestEntitie c";
        List<Object> result =  dao.jpqlQuery(query, 1, 0);

        for(int i =0; i < result.size(); i++){
            TranslationTestEntitie test = (TranslationTestEntitie) result.get(i);
            td.add((TData) result.get(i));

        }

    }

次に、このデータテーブルを使用して結果を表示します。

<h:dataTable value="#{languageBeanTest.dataObj}" var="o">

        <h:column>
            <f:facet name="header">Id</f:facet>
                    #{o.id}
                </h:column>

        <h:column>
            <f:facet name="header">key</f:facet>
                    #{o.key}
                </h:column>

        <h:column>
            <f:facet name="header">language</f:facet>
                    #{o.language}
                </h:column>

        <h:column>
            <f:facet name="header">translation</f:facet>
                    #{o.translation}
                </h:column>

    </h:dataTable>

次のエラーが表示されます。

java.lang.ClassCastException: callflow.cfdbc_common.entities.TranslationTestEntitie cannot be cast to callflow.ccadmin.beans.LanguageBeanTest$TData

DB から結果をオブジェクトのリストとして取得します。これらのオブジェクトを JSF ページに表示するにはどうすればよいですか?

PSこれはエンティティのソースコードです

@Entity
@Table(name = "Translations")
public class TranslationTestEntitie extends AbstractEntityWithId {

    private static final long serialVersionUID = 2029240552230401080L;

    @Column(name = "id", insertable=false, updatable=false)
    private long id;
    @Column(name = "key", insertable=false, updatable=false)
    private String key;
    @Column(name = "language", insertable=false, updatable=false)

    private String language;
    @Column(name = "translation", insertable=false, updatable=false)
    private String translation;

    public TranslationTestEntitie() {
    }

    // Getters and setters
    public Long getId() {
        return id;
    }

    //@Transient    Field will not be saved in database
    public void setId(long id) {
        this.id = id;
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public String getLanguage() {
        return language;
    }

    public void setLanguage(String language) {
        this.language = language;
    }

    public String getTranslation() {
        return translation;
    }

    public void setTranslation(String translation) {
        this.translation = translation;
    }

}

同じオブジェクト属性を持っているため、JPA によって返されるオブジェクトは TData と同じになると思います。

4

1 に答える 1

2

明らかに、返されたオブジェクトは TranslationTestEntitie 型であり、TData 型ではありません。TranslationTestEntitie を TData 型のオブジェクトに変換するコードを記述する必要があります。

TranslationTestEntitie test = (TranslationTestEntitie) result.get(i);
TData newTData = new TData(test.getId(), test.getKey(), test.getLanguage(),  test.getTranslation());
td.add(newTData);

とにかく同じフィールドがある場合、なぜ TranslationTestEntitie 自体を使用できないのでしょうか?

List<TranslationTestEntitie> td=  new ArrayList<TranslationTestEntitie>();

for(int i =0; i < result.size(); i++){
        TranslationTestEntitie test = (TranslationTestEntitie) result.get(i);
        td.add(test);
}
于 2013-03-20T13:35:29.103 に答える