读取xhtml(jsf)中的persistente包属性

时间:2013-06-18 13:14:07

标签: jsf primefaces persistent

Morning Stack成员,

请你帮我解决这个问题吗?

我试图从一个对象读取一个持久集属性,但它只返回一行,我在数据库表中有两个插入的行用于这样的id

  • 如何在dataTable中加载所有行?
  • 如何读取LinkHashSet表中加载的所有字段作为id,name,description等...

Bean:

@Inject
private Pessoa pessoa;

实体Pessoa:

@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>

我尝试过使用xhtml p:outputLabel中的不同组合但完全没有成功

我在对象pessoa中观看了持久集并且它具有值。这个包是ArrayList

我没有发布图片的声誉。遗憾

2 个答案:

答案 0 :(得分:2)

好的,现在我看到发生了什么......你不能在数据表中使用Set。你必须使用一些有序的集合。请参阅this question了解详细信息....我建议您创建一个新的方法

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

并将绑定更改为:value="#{pessoaMB.pessoa.contatoPessoasList}"

答案 1 :(得分:0)

对我来说,似乎你在outputLabel中使用了错误的var变量。在您的表格中,您已定义var="car"。所以而不是:

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

您应该通过此car变量访问您的值,例如:

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

<强>更新

您的rowKey属性似乎也有误,请改为:

rowKey="#{contatoPessoas.id}"

<强>更新

正如@Ammar上面提到的那样,在版本2.2之前的JSF中不支持set也存在问题。所以另一个解决方案是升级到 JSF 2.2