gpt4 book ai didi

java - 如何使一个值的外键显示在primefaces数据表中

转载 作者:可可西里 更新时间:2023-11-01 07:37:00 25 4
gpt4 key购买 nike

我有一个 primefaces 数据表,其中一列的值是一个外键,我想显示附加到另一个数据库表中的外键的值,以显示在数据表的该列中。

问题.xhtml

<p:dataTable id="dataTable" var="issues" value="#{displayIssuesBean.issues}"
scrollable="true" style="width:1000px;" emptyMessage="#{msg['prometheus_issuesdisplayemptymessage']}">
<f:facet name="header">#{msg['prometheus_issues']}</f:facet>
<p:column headerText="#{msg['prometheus_number']}">
<h:outputText value="#{issues.id}" />
</p:column>

<p:column headerText="#{msg['prometheus_title']}">
<h:outputText value="#{issues.issueTitle}" />
</p:column>

<p:column headerText="#{msg['prometheus_type']}">
<h:outputText value="#{issues.issueType}" />
</p:column>

<p:column headerText="#{msg['prometheus_estimatedtime']}">
<h:outputText value="#{issues.estimationTime}" />
</p:column>
</p:dataTable>

在此数据表中,第三列值即“#{issues.issueType}”是一个外键,我希望在另一个表中有与此关联的值以显示在该位置。

我尝试使用另一个 DTO 设置值以及缺少的属性并尝试设置值并再次获得但没有获得选择的结果。

bean 代码

public List<IssueDisplayDTO> getIssueDataToForm(List<IssueDBDTO> list) {
for (int i = 0; i < list.size(); i++) {
issueDisplayDTO.setIssueNumber(list.get(i).getId());
issueDisplayDTO.setIssueType(setIssueTypeWithIssueTypeId(list.get(i).getId()));
issueDisplayDTO.setTitle(list.get(i).getIssueTitle());
issueDisplayDTO.setEstimatedTime(list.get(i).getEstimationTime());
modifiedList.add(issueDisplayDTO);
}
return modifiedList;
}

private String setIssueTypeWithIssueTypeId(int issueTypeId) {
String type=null;
if (issueTypeId == 1){
type="Bug";}
else if (issueTypeId == 2)
{type="Story";}
else if (issueTypeId == 3)
{type="Task";}
return type;
}

使用上面的代码,modifiedList 保存值直到 for 循环持续,但是当通过 setter 和 getter 传递或什至设置时,列表将被最后一条记录填充。请协助我解决这个问题,有什么简单的方法可以解决这个问题吗?

最佳答案

您并不是在每次迭代期间都创建新的 issueDisplayDTO 实例。相反,您正在重复使用同一个实例,并且只在每次迭代期间更改其属性。因此,列表中所有添加的条目显然都将引用一个相同的 issueDisplayDTO 实例,该实例具有在上一轮迭代期间设置的属性。

您应该在每次迭代中创建一个新的。

for (int i = 0; i < list.size(); i++) {
IssueDBDTO issueDisplayDTO = new IssueDBDTO(); // Here.
issueDisplayDTO.setIssueNumber(list.get(i).getId());
// ...
modifiedList.add(issueDisplayDTO);
}

此问题与MySQL、FK关系无关,更与JSF/PrimeFaces无关。这只是基本的 Java。当使用 main() 方法在普通 Java 应用程序中重新创建问题并使用 System.out.println() 呈现它时,您会遇到完全相同的问题整个 JSF 网页。


与具体问题无关,考虑使用 enum 而不是 int。而且,每次 list.get(i) 调用都非常低效。只捕获它一次。

关于java - 如何使一个值的外键显示在primefaces数据表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29969713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com