html循环cfor,jsp–计算c:forEach循环中所有数字的总和
注意:我尝试组合答案做⼀个全⾯的列表.我在适当的时候提到名称,以便在到期时给予信⽤.
有很多⽅法来解决这个问题,与每个相关的利弊:
纯JSP解决⽅案
正如上⾯提到的ScArcher2⼀样,⼀个⾮常容易和简单的解决⽅案就是直接在JSP中实现:
${person.name}${person.age}
${ageTotal}
这个解决⽅案的问题是,JSP会让您感到困惑,因为您可能会引⼊scriplet.如果您期待每个⼈看页⾯都能够遵循基本的逻辑,这是⼀个很好的选择.
纯EL溶液
如果您已经在EL 3.0(Java EE 7 / Servlet 3.1)上使⽤新的⽀持streams and lambdas:
${person.name}${person.age}
${personList.stream().map(person -> person.age).sum()}
JSP EL功能
输出总数的另⼀种⽅式是在JSP中不引⼊scriplet代码是使⽤EL函数. EL函数允许您在公共类中调⽤public static⽅法.例如,如果您想迭代您的集合并对值进⾏求和,您可以在公共类中定义⼀个名为sum(List people)的公共静态⽅法,也许称为PersonUtils.在您的tld⽂件中,您将放置以下声明:
sum
int sum(java.util.List people)
在你的JSP中你会写:
...
JSP EL功能有⼀些好处.它们允许您使⽤现有的Java⽅法,⽽不需要编码到特定的UI(⾃定义标签库).他们也是紧凑的,不会混淆⼀个⾮编程导向的⼈.
⾃定义标签
所涉及的步骤包括对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 = (();
sum+=p.getAge();
}
} catch (Exception ex) {
throw new JspTagException("SimpleTag: " +
}
return SKIP_BODY;
}
public int doEndTag() {
return EVAL_PAGE;
}
}
在tld⽂件中定义标签:jsp和html哪个更好
personSum
example.PersonSumTag
empty
...
personList
true
true
java.util.List
...
在您的JSP顶部声明taglib:
并使⽤标签:
${person.name}${person.age}
显⽰标签
正如之前提到的zmf,您也可以使⽤显⽰标签,尽管您需要包含相应的库:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论