当前位置:  开发笔记 > 编程语言 > 正文

计算c:forEach循环中所有数字的总和

如何解决《计算c:forEach循环中所有数字的总和》经验,为你挑选了1个好方法。

我有一个这样的Java bean:

class Person {
  int age;
  String name;
}

我想在JSP中迭代这些bean的集合,在HTML表格行中显示每个人,在表格的最后一行我想显示所有年龄段的总数.

生成表行的代码如下所示:


  ${person.name}${person.age}

但是,我很难找到一种方法来计算最终行中显示的年龄总计,而不需要求助于scriptlet代码,任何建议?



1> Jon-Erik..:

注意:我尝试将答案组合成一个综合列表.我提到了适当的名字,以便在到期时提供信贷.

有很多方法可以解决这个问题,每个方面都有利弊:

纯JSP解决方案

正如上面提到的ScArcher2,一个非常简单和简单的问题解决方案是直接在JSP中实现它,如下所示:



  
  ${person.name}${person.age}

${ageTotal}

这个解决方案的问题在于JSP变得令人困惑,以至于您可能已经引入了scriplet.如果您预计每个看页面的人都能够遵循现有的基本逻辑,那么这是一个不错的选择.

纯EL解决方案

如果您已经使用EL 3.0(Java EE 7/Servlet 3.1),请使用对流和lambdas的新支持:


  ${person.name}${person.age}

${personList.stream().map(person -> person.age).sum()}

JSP EL函数

在不将scriplet代码引入JSP的情况下输出总数的另一种方法是使用EL函数.EL函数允许您在公共类中调用公共静态方法.例如,如果您想迭代集合并对值求和,则可以在公共类中定义名为sum(List people)的公共静态方法,可能称为PersonUtils.在您的tld文件中,您将放置以下声明:


  sum
  com.example.PersonUtils
  int sum(java.util.List people)
 

在你的JSP中你会写:

<%@ taglib prefix="f" uri="/your-tld-uri"%>
...

JSP EL函数有一些好处.它们允许您使用现有的Java方法,而无需编写特定的UI(自定义标记库).它们也很紧凑,不会混淆非编程人员.

自定义标签

另一种选择是推出自己的自定义标签.这个选项将涉及最多的设置,但会给你我认为你真正寻找的东西,绝对没有scriptlets.有关使用简单自定义标签的精彩教程,请访问http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/JSPTags5.html#74701

涉及的步骤包括子类化TagSupport:

public PersonSumTag extends TagSupport {

   private List personList;

   public List getPersonList(){
      return personList;
   }

   public void setPersonList(List personList){
      this.personList = personList;
   }

   public int doStartTag() throws JspException {
      try {
        int sum = 0;
        for(Iterator it = personList.iterator(); it.hasNext()){
          Person p = (Person)it.next();
          sum+=p.getAge();
        } 
        pageContext.getOut().print(""+sum);
      } catch (Exception ex) {
         throw new JspTagException("SimpleTag: " + 
            ex.getMessage());
      }
      return SKIP_BODY;
   }
   public int doEndTag() {
      return EVAL_PAGE;
   }
}

在tld文件中定义标记:


   personSum
   example.PersonSumTag
   empty
   ...
   
      personList
      true
      true
      java.util.List
   
   ...

在JSP的顶部声明taglib:

<%@ taglib uri="/you-taglib-uri" prefix="p" %>

并使用标签:


  ${person.name}${person.age}


显示标签

正如前面提到的zmf,你也可以使用display标签,尽管你需要包含适当的库:

http://displaytag.sourceforge.net/11/tut_basic.html

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有