2013-06-18 3 views
0

Утренние участники стволовых клеток,читать свойство persistente bag в xhtml (jsf)

Не могли бы вы помочь мне в этом вопросе?

Im пытаясь прочитать постоянное заданное свойство из объекта, но он возвращает только одну строку, и у меня есть в базе данных таблицы двух вставленных строк для такого идентификатора

  • Как я могу загрузить в DataTable всех строк?
  • Как я могу прочитать все поля, загруженные в таблице LinkHashSet как идентификатор, название, описание и т.д. ...

Bean:

@Inject 
private Pessoa pessoa; 

Entity Пессоа:

@Entity 
@Table(name = "pessoa",uniqueConstraints = {@UniqueConstraint(columnNames = { "idt_pessoa" }) }) 
@Inheritance(strategy = InheritanceType.JOINED) 
@OneToMany 
@JoinColumn(name = "idt_pessoa") 
private Set<ContatoPessoa> contatoPessoas = new LinkedHashSet<ContatoPessoa>(); 

public Set<ContatoPessoa> getContatoPessoas() { 
    return contatoPessoas; 
} 

public void setContatoPessoas(Set<ContatoPessoa> contatoPessoas) { 
    this.contatoPessoas = contatoPessoas; 
} 

Предприятие ContatoPessoa:

@Entity 
@Table(name="contato_pessoa") 
public class ContatoPessoa implements Entidade{ 
@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "idt_contatoPessoa") 
private Long id; 

@Column(length=100) 
private String des_areaContatoPessoa; 

@Column(length=100) 
private String des_emailContatoPessoa; 

В XHTML:

<p:dataTable id="dTContato" var="contatoPessoas" 
value="#{pessoaMB.pessoa.contatoPessoas}" 
rowKey="#{pessoa.contatoPessoas.id}"> 
<p:column headerText="#{bundle.pessoa_lblid}"> 
<p:outputLabel value="#{contatoPessoas.key}"/> 
</p:column> 

Ive пытался с различными комбинациями в XHTML p:outputLabel, но не имели успеха на всех

Я наблюдал постоянный набор из объекта pessoa и имеет значения. Сумка - ArrayList

У меня нет репутации для публикации изображений. sorry

+0

пожалуйста, напишите код Java. вы видите строки в таблице, а столбец id пуст или вы вообще не видите никаких строк? – Ammar

+0

Ammar, моя dataTable загружает только все строки пустым. Я вижу строки в таблице, а столбец id и другие столбцы пустые – Al2x

+0

@BalusC ваш комментарий исчез. Я не знаю, почему. – Al2x

ответ

2

Хорошо, теперь я вижу, что происходит ... Вы не можете использовать Set в таблице данных. Вы должны использовать некоторую упорядоченную коллекцию. см. this question для деталей ....Я хотел бы предложить создать новый метод

public List<ContatoPessoa> getContatoPessoasList() { 
    return new ArrayList<ContatoPessoa>(contatoPessoas); 
} 

и изменить ваши привязки к: value="#{pessoaMB.pessoa.contatoPessoasList}"

+0

да. Я прочитал ссылку, которую вы опубликовали. Проблема заключается в том, когда я реализую свойство, поскольку List Hybernate заявляет, что есть несколько соединений для извлечения, потому что я соединяю больше таблиц. Я просто работаю так. что вы думаете ? – Al2x

+0

общественного объекта [] getContatoPessoas() { \t \t \t \t List Список = новый ArrayList (); \t \t для (VAL объекта: contatoPessoas) (! List.contains (VAL)) { \t \t если { \t \t list.add ((ContatoPessoa) валь); \t \t} \t \t} \t \t List.toArray (новый объект [0]); \t \t \t \t return list.toArray (новый объект [0]); \t} *** это сработало таким образом @Infragile **** – Al2x

+0

Я не хотел, чтобы вы изменили привязку hibernate ... сохраните набор для спящего режима, но для пользовательского интерфейса добавьте метод getContatoPessoasList, он не должен создавать спящий режим ошибка ... Я не уверен, почему вам нужен Object [] вместо List ... но я рад, что прочитал его работы :) – Ammar

0

Мне кажется, что вы используете неправильную переменную var в своей выходной таблице. В вашей таблице вы определили var="car". Таким образом, вместо:

<p:outputLabel value="#{pessoa.contatoPessoas.id}"/> 

Вы должны использовать доступ свои ценности через эту car переменной, что-то вроде:

<p:outputLabel value="#{car.id}"/> 

UPDATE

также ваш атрибут rowKey кажется неправильным, изменить его, как это :

rowKey="#{contatoPessoas.id}" 

ОБНОВЛЕНИЕ

Как отмечалось выше, в AAmar также существует проблема с набором, который не поддерживается в JSF старше версии 2.2. Таким образом, еще одним решением является обновление до JSF 2.2

+0

Инфракрасный, я получил эту ошибку, перейдя на # {car.id} -> Класс 'org.hibernate.collection.internal.PersistentSet' не имеет свойства 'id'. – Al2x

+0

странно ... пожалуйста, разместите всю свою разметку 'p: dataTable' (обновите свой вопрос) –

+0

обновлено @Infragile – Al2x