Morning Stack成员,
请你帮我解决这个问题吗?
我试图从一个对象读取一个持久集属性,但它只返回一行,我在数据库表中有两个插入的行用于这样的id
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
我没有发布图片的声誉。遗憾
答案 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