Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSF表达式语言操作和求和值字段_Java_Jsf_Sum_El - Fatal编程技术网

Java JSF表达式语言操作和求和值字段

Java JSF表达式语言操作和求和值字段,java,jsf,sum,el,Java,Jsf,Sum,El,我需要计算jsf数据表中收到的金额,并在列中显示这些字段的总和 A) 我需要在value1的EL表达式中计算所有项目的总和,并在total1字段中显示 B) 我需要在value2的EL表达式中计算所有项目的总和,并在total2字段中显示 C) 我需要总和1+总和2,并在字段中显示总和 Obs.:我从DatabaseBean接收值 <p:dataTable id="table" value="#{valueBean.values}" var="item"> <p:column

我需要计算jsf数据表中收到的金额,并在列中显示这些字段的总和

A) 我需要在value1的EL表达式中计算所有项目的总和,并在total1字段中显示

B) 我需要在value2的EL表达式中计算所有项目的总和,并在total2字段中显示

C) 我需要总和1+总和2,并在字段中显示总和

Obs.:我从DatabaseBean接收值

<p:dataTable id="table" value="#{valueBean.values}" var="item">
<p:column >
<h:outputText id="value1" value="#{(item[0]*160)/100}" />
<f:facet name="footer">
   <h:outputText id="total1" value="#...????" />
</f:facet>
</p:column >
<p:column >
<h:outputText id="value2" value="#{(item[1]*160)/100}" />
<f:facet name="footer">
   <h:outputText id="total2" value="#...????" />
</f:facet>   
</p:column >
<h:outputText id="total" value="#...????" />
...
</p:dataTable>

...
  • 首先要指出的事情。执行诸如value=“#{(项[0]*160)/100}”之类的操作是糟糕的编程实践。出于各种原因,但显然是出于可维护性,未来的开发人员将发现,他们必须理解为什么160或100,更不用说找出如何在这些值发生变化时安全地改变它们
  • 根据值中的项是否为有效的“数字”值,您可能会遇到可以在服务器端而不是UI层轻松处理的错误
  • 最安全的策略是使用bean来计算和保存需要在UI上显示的所有值

    -你听起来像个绿色程序员,所以我会帮你一把。但是如果您仔细考虑,下面的代码仍然可以使用一些改进

    -我已经在下面将itembean定义为一个内部类,但是如果您对此感到满意的话,您可以随时将其分解为自己的类

    -此外,此策略允许您在需要时添加检查,并在需要时添加错误处理,我没有包括这些

    -我还假设初始数据来自DatabaseBean列表,该列表在一个数组中包含大约2个值

    import java.util.ArrayList;
    import java.util.List;
    
    public class BagOfItems {
    
        private static int COMMON_MULTIPLIER = 160;//here document where this comes from
        private static int COMMON_DIVISOR = 100; //here document where this comes from
    
        private class Item{
            private int value1;
            private int value2;
            private int calculatedValue1;
            private int calculatedValue2;
    
            public Item(int[] values){
                value1 = values[0];
                value2 = values[1];
                calculateValues();
            }
    
            public int getValue1() {
                return value1;
            }
            public void setValue1(int value1) {
                this.value1 = value1;
            }
            public int getValue2() {
                return value2;
            }
            public void setValue2(int value2) {
                this.value2 = value2;
            }
    
            public int getCalculatedValue1() {
                return calculatedValue1;
            }
    
            public void setCalculatedValue1(int calculatedValue1) {
                this.calculatedValue1 = calculatedValue1;
            }
    
            public int getCalculatedValue2() {
                return calculatedValue2;
            }
    
            public void setCalculatedValue2(int calculatedValue2) {
                this.calculatedValue2 = calculatedValue2;
            }
    
            public void calculateValues(){
                calculatedValue1 = (value1 * COMMON_MULTIPLIER)/COMMON_DIVISOR;
                calculatedValue2 = (value2 * COMMON_MULTIPLIER)/COMMON_DIVISOR;
            }
        }
    
    
        private int totalValues1 = 0;
        private int totalValues2 = 0;
    
        private List<Item> items = new ArrayList<Item>();
    
        public BagOfItems(List<DatabaseBean> databaseBeans){
            initItems(databaseBeans);
        }
    
        private void initItems(List<DatabaseBean> databaseBeans){
            for(DatabaseBean databaseBean : databaseBeans){
                Item item = new Item(databaseBean.values);
                items.add(item);
            }
        }
    
        protected void sum(){
            for(Item item : items){
                totalValues1 += item.getCalculatedValue1();
                totalValues2 += item.getCalculatedValue2();
            }
        }
    
        public int getTotalValues1() {
            return totalValues1;
        }
    
        public void setTotalValues1(int totalValues1) {
            this.totalValues1 = totalValues1;
        }
    
        public int getTotalValues2() {
            return totalValues2;
        }
    
        public void setTotalValues2(int totalValues2) {
            this.totalValues2 = totalValues2;
        }
    
        public List<Item> getItems() {
            return items;
        }
    
        public void setItems(List<Item> items) {
            this.items = items;
        }
    
        public int getTotal(){
            return (totalValues1 + totalValues2);
        }
    
    }
    
    import java.util.ArrayList;
    导入java.util.List;
    公共类BagOfItems{
    private static int COMMON_MULTIPLIER=160;//这里是它的来源文档
    private static int COMMON_DIVISOR=100;//这里是它的来源文档
    私人类项目{
    私人投资价值1;
    私人投资价值2;
    私有int计算值1;
    私有int计算值2;
    公共项(int[]值){
    value1=值[0];
    value2=值[1];
    calculateValues();
    }
    public int getValue1(){
    返回值1;
    }
    public void setValue1(int value1){
    此值为1.value1=value1;
    }
    public int getValue2(){
    返回值2;
    }
    public void setValue2(int value2){
    此参数为0.value2=value2;
    }
    public int getCalculatedValue1(){
    返回计算值1;
    }
    public void setCalculatedValue1(int calculatedValue1){
    this.calculatedValue1=calculatedValue1;
    }
    public int getCalculatedValue2(){
    返回计算值2;
    }
    public void setCalculatedValue2(int calculatedValue2){
    this.calculatedValue2=calculatedValue2;
    }
    public void calculateValues(){
    计算值1=(值1*公共乘子)/公共除数;
    计算值2=(值2*公共乘子)/公共除数;
    }
    }
    私有整数totalValues1=0;
    私有整数totalValues2=0;
    私有列表项=新的ArrayList();
    公共BagOfItems(列出数据库bean){
    initItems(数据库bean);
    }
    私有void initItems(列出数据库bean){
    for(DatabaseBean DatabaseBean:databaseBeans){
    Item=新项(databaseBean.values);
    项目。添加(项目);
    }
    }
    受保护的无效金额(){
    用于(项目:项目){
    totalValues1+=item.getCalculatedValue1();
    totalValues2+=item.getCalculatedValue2();
    }
    }
    public int getTotalValues1(){
    返回总值1;
    }
    公共无效集合totalValues1(整数totalValues1){
    this.totalValues1=totalValues1;
    }
    public int getTotalValues2(){
    返回totalValues2;
    }
    公共无效集合totalValues2(整数totalValues2){
    this.totalValues2=totalValues2;
    }
    公共列表getItems(){
    退货项目;
    }
    公共无效集合项(列表项){
    这个项目=项目;
    }
    公共int getTotal(){
    返回值(totalValues1+totalValues2);
    }
    }
    
    用户界面会像这样

    <p:dataTable id="table" value="#{bagOfItems.items}" var="item">
    <p:column >
    <h:outputText id="value1" value="#{item.calculatedValue1}" />
    <f:facet name="footer">
       <h:outputText id="total1" value="#{bagOfItems.totalValues1}" />
    </f:facet>
    </p:column >
    <p:column >
    <h:outputText id="value2" value="#{item.calculatedValue2}" />
    <f:facet name="footer">
       <h:outputText id="total2" value="#{bagOfItems.totalValues2}" />
    </f:facet>   
    </p:column >
    <h:outputText id="total" value="#{bagOfItems.total}" />
    ...
    </p:dataTable>
    
    
    ...