如何使一个值的外键显示在primefaces数据表中
How to make foreign keys of a value be displayed in primefaces datatable
我有一个 primefaces data-table,其中一列的值是一个外键,我想显示附加到另一个数据库中的外键的值 table 以显示在数据的那一列中-table.
issue.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>
在此数据中table 第三列值即“#{issues.issueType}”是一个外键,我希望在另一个 table 中具有与此关联的值显示在那个地方。
我尝试使用另一个 DTO 设置值以及缺少的属性,并尝试设置值并再次获得但没有获得选择的结果。
豆码
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)
调用都非常低效。只拿一次。
我有一个 primefaces data-table,其中一列的值是一个外键,我想显示附加到另一个数据库中的外键的值 table 以显示在数据的那一列中-table.
issue.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>
在此数据中table 第三列值即“#{issues.issueType}”是一个外键,我希望在另一个 table 中具有与此关联的值显示在那个地方。
我尝试使用另一个 DTO 设置值以及缺少的属性,并尝试设置值并再次获得但没有获得选择的结果。
豆码
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)
调用都非常低效。只拿一次。