Error[8]: Undefined offset: 16, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

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

注意: 我尝试合并答案以列出完整的列表。我在适当的地方提到了一些名称,以便在适当的时候给予认可。

解决此问题的方法有很多,每种方法都有各自的优点/缺点:

纯JSP解决方案

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

<c:set var="ageTotal" value="纯EL解决方案" /><c:forEach var="person" items="${personList}">  <c:set var="ageTotal" value="${ageTotal + person.age}" />  <tr><td>${person.name}<td><td>${person.age}</td></tr></c:forEach>${ageTotal}

该解决方案的问题在于,JSP可能会令人困惑,以至于您可能还引入了scriplet。如果您希望每个人在浏览该页面时都能遵循当前的基本逻辑,那么这是一个不错的选择。


3.1),请使用对流和lambda的新支持:

如果您已经在使用EL 3.0(Java EE 7 / Servlet

<c:forEach var="person" items="${personList}">  <tr><td>${person.name}<td><td>${person.age}</td></tr></c:forEach>${personList.stream().map(person -> person.age).sum()}

JSP EL函数


people)的公共静态方法。在您的tld文件中,您将放置以下声明:

在不向JSP中引入脚本代码的情况下输出总计的另一种方法是使用EL函数。EL函数允许您在公共类中调用公共静态方法。例如,如果您想遍历集合并求和值,则可以在公共类(可能称为PersonUtils)中定义一个称为sum(List

<function>  <name>sum</name>  <function-class>com.example.PersonUtils</function-class>  <function-signature>int sum(java.util.List people)</function-signature></function>

<%@ taglib prefix="f" uri="/your-tld-uri"%>...<c:out value="${f:sum(personList)}"/>

在您的JSP中,您应该编写:

自定义标签

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

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;   }}

另一个选择是滚动您自己的自定义标签。此选项将涉及最多的设置,但会为您提供我认为基本上所需的内容,绝对没有scriptlet。可以在http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/JSPTags5.html#74701中找到使用简单自定义标签的不错的教程。

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

<tag>   <name>personSum</name>   <tag-class>example.PersonSumTag</tag-class>   <body-content>empty</body-content>   ...   <attribute>      <name>personList</name>      <required>true</required>      <rtexprvalue>true</rtexprvalue>      <type>java.util.List</type>   </attribute>   ...</tag>

在tld文件中定义标签:

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

在JSP顶部声明taglib:

<c:forEach var="person" items="${personList}">  <tr><td>${person.name}<td><td>${person.age}</td></tr></c:forEach><p:personSum personList="${personList}"/>

并使用标签:

显示标签

[+++]

正如前面的zmf所提到的,尽管您需要包括适当的库,但是您也可以使用display标记:

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



)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
计算c:forEach循环中所有数字的总和_随笔_内存溢出

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

计算c:forEach循环中所有数字的总和,第1张

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

注意: 我尝试合并答案以列出完整的列表。我在适当的地方提到了一些名称,以便在适当的时候给予认可。

解决此问题的方法有很多,每种方法都有各自的优点/缺点:

纯JSP解决方案

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

<c:set var="ageTotal" value="纯EL解决方案" /><c:forEach var="person" items="${personList}">  <c:set var="ageTotal" value="${ageTotal + person.age}" />  <tr><td>${person.name}<td><td>${person.age}</td></tr></c:forEach>${ageTotal}

该解决方案的问题在于,JSP可能会令人困惑,以至于您可能还引入了scriplet。如果您希望每个人在浏览该页面时都能遵循当前的基本逻辑,那么这是一个不错的选择。


3.1),请使用对流和lambda的新支持:

如果您已经在使用EL 3.0(Java EE 7 / Servlet

<c:forEach var="person" items="${personList}">  <tr><td>${person.name}<td><td>${person.age}</td></tr></c:forEach>${personList.stream().map(person -> person.age).sum()}

JSP EL函数


people)的公共静态方法。在您的tld文件中,您将放置以下声明:

在不向JSP中引入脚本代码的情况下输出总计的另一种方法是使用EL函数。EL函数允许您在公共类中调用公共静态方法。例如,如果您想遍历集合并求和值,则可以在公共类(可能称为PersonUtils)中定义一个称为sum(List

<function>  <name>sum</name>  <function-class>com.example.PersonUtils</function-class>  <function-signature>int sum(java.util.List people)</function-signature></function>

<%@ taglib prefix="f" uri="/your-tld-uri"%>...<c:out value="${f:sum(personList)}"/>

在您的JSP中,您应该编写:

自定义标签

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

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;   }}

另一个选择是滚动您自己的自定义标签。此选项将涉及最多的设置,但会为您提供我认为基本上所需的内容,绝对没有scriptlet。可以在http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/JSPTags5.html#74701中找到使用简单自定义标签的不错的教程。

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

<tag>   <name>personSum</name>   <tag-class>example.PersonSumTag</tag-class>   <body-content>empty</body-content>   ...   <attribute>      <name>personList</name>      <required>true</required>      <rtexprvalue>true</rtexprvalue>      <type>java.util.List</type>   </attribute>   ...</tag>

在tld文件中定义标签:

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

在JSP顶部声明taglib:

<c:forEach var="person" items="${personList}">  <tr><td>${person.name}<td><td>${person.age}</td></tr></c:forEach><p:personSum personList="${personList}"/>

并使用标签:

显示标签

正如前面的zmf所提到的,尽管您需要包括适当的库,但是您也可以使用display标记:

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



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5066137.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存