オブジェクトの 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 と同じになると思います。