我使用primefaces数据表来显示我的数据 这是我的代码:
<p:dataTable id="tab6" var="comp" value="#{excelReport.report6}" rendered="#{excelReport.date != null}">
<f:facet name="header">
<h:outputText value="heading text"/>
</f:facet>
<p:columnGroup type="header">
<p:row>
<p:column headerText="Sr No" />
<p:column headerText="Years" />
<p:column headerText="Quarter no." />
<p:column headerText="POL" />
<p:column headerText="LPG" />
<p:column headerText="AVIATION" />
<p:column headerText="LUBES" />
<p:column headerText="OTHERS" />
</p:row>
</p:columnGroup>
<p:column><h:outputText value="#{comp.serialNo}" /> </p:column>
<p:column><h:outputText value="#{comp.quarterRange}" /></p:column>
<p:column><h:outputText value="#{comp.quarterNumber}" /></p:column>
<p:column><h:outputText value="#{comp.pol}" /></p:column>
<p:column><h:outputText value="#{comp.lpg}" /></p:column>
<p:column><h:outputText value="#{comp.aviation}" /></p:column>
<p:column><h:outputText value="#{comp.lubes}" /></p:column>
<p:column><h:outputText value="#{comp.others}" /></p:column>
<p:columnGroup type="footer">
<p:row>
<p:column footerText="Total" colspan="3"/>
<p:column footerText="#{comp.polTotal}"/>
<p:column footerText="#{comp.lpgTotal}"/>
<p:column footerText="#{comp.aviationTotal}"/>
<p:column footerText="#{comp.lubesTotal}"/>
<p:column footerText="#{comp.othersTotal}"/>
</p:row>
</p:columnGroup>
</p:dataTable>
除了我的页脚行中没有任何数据外,每件事情都运行正常。 我正试图在我的footerText中显示int类型的静态变量。
这是由bean:
package dao;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
@ManagedBean
@ViewScoped
public class Excel_Target_Compliance implements Serializable {
public Excel_Target_Compliance() {
}
private String quarterRange;
private String quarterNumber;
private int pol;
private int lpg;
private int aviation;
private int lubes;
private int others;
private int serialNo;
static int polTotal;
static int lpgTotal;
static int aviationTotal;
static int lubesTotal;
static int othersTotal;
public static int getPolTotal() {
return polTotal;
}
public static int getLpgTotal() {
return lpgTotal;
}
public static int getAviationTotal() {
return aviationTotal;
}
public static int getLubesTotal() {
return lubesTotal;
}
public static int getOthersTotal() {
return othersTotal;
}
public int getSerialNo() {
return serialNo;
}
public void setSerialNo(int serialNo) {
this.serialNo = serialNo;
}
public String getQuarterRange() {
return quarterRange;
}
public void setQuarterRange(String quarterRange) {
this.quarterRange = quarterRange;
}
public String getQuarterNumber() {
return quarterNumber;
}
public void setQuarterNumber(String quarterNumber) {
this.quarterNumber = quarterNumber;
}
public int getPol() {
return pol;
}
public void setPol(int pol) {
polTotal = polTotal + pol;
this.pol = pol;
}
public int getLpg() {
return lpg;
}
public void setLpg(int lpg) {
lpgTotal = lpgTotal + lpg;
this.lpg = lpg;
}
public int getAviation() {
return aviation;
}
public void setAviation(int aviation) {
aviationTotal = aviationTotal + aviation;
this.aviation = aviation;
}
public int getLubes() {
return lubes;
}
public void setLubes(int lubes) {
lubesTotal = lubesTotal + lubes;
this.lubes = lubes;
}
public int getOthers() {
return others;
}
public void setOthers(int others) {
othersTotal = othersTotal + others;
this.others = others;
}
}
答案 0 :(得分:4)
public static int getPolTotal() {
return polTotal;
}
您不能将getter
视为静态。Primefaces
视图无法识别此信息。
将getter
更改为:
public int getPolTotal() {
return polTotal;
}
您仍然可以variable
作为static
。 (private static int polTotal;
)
答案 1 :(得分:3)
已经提到过其他答案,你不能以这种方式使用EL表达式访问静态字段。
但我认为你真正的问题是关于面向对象的概念。我认为没有理由在static
中使用Excel_Target_Compliance
。这甚至是不好的做法。您的bean是视图范围的,因此您将拥有许多实例(每个视图显示一个实例),但静态字段对于整个应用程序将是唯一的。因此,只要两个用户访问同一页面,您就会遇到并发问题。
在你的情况下,我会创建两个类:一个表示表中的一行,一个表示整个表,哪些可以返回总信息。这可能是这样的(简化):
public class ComplianceTable {
private List<ComplianceLine> lines;
public int getPolTotal() {
// ... go through all lines to get the total
}
// other methods currently represented as static fields
}
public class ComplianceLine {
private int pol;
// ... other fields from Excel_Target_Compliance
}
在JSF代码中,您必须引用lines
的{{1}}元素:
p:dataTable
答案 2 :(得分:1)
据我所知,静态变量不属于实例,而属于包含变量的类。我认为你不能直接从JSF访问静态变量。相反,您可以使用其getter方法创建另一个变量,以获取静态变量的值,如下所示。
public int getTotalPol(){
return Bean.polTotal;
}
并在JSF页面上使用此方法来访问静态变量的值,如下所示。
<p:column footerText="#{comp.getTotalPol()}"/>