我是JSF和facelets的新手。我想知道为什么我没有得到预期的结果?我正在使用JSF 1.2,使用facelets 1.1.14。我期待会话变量'indx'在循环后保持孙子的总数。
相反它总是0.我做错了什么?这是我的代码......
<h:form>
<c:set var="indx" value="0" scope="session"></c:set>
<ui:repeat value="#{grandparentholder.grandparents}" var="grandparent">
<ui:repeat value="#{grandparent.parents}" var="parent">
<ui:repeat value="#{parent.child}" var="child">
<c:set var="indx" value="#{indx+1}" scope="session"></c:set>
</ui:repeat>
</ui:repeat>
</ui:repeat>
</h:form>
答案 0 :(得分:1)
JSF标记和JSTL标记不会像编码所期望的那样同步运行。长话短说:JSTL in JSF2 Facelets... makes sense?
您必须以不同方式解决您的特定问题。如何做到这一点取决于具体的功能要求。如果我理解你只是想要计算所有可用的孩子,那么你需要<c:forEach>
而不是<ui:repeat>
<c:set var="indx" value="0" scope="session" />
<c:forEach items="#{grandparentholder.grandparents}" var="grandparent">
<c:forEach items="#{grandparent.parents}" var="parent">
<c:forEach items="#{parent.child}" var="child">
<c:set var="indx" value="#{indx+1}" scope="session" />
</c:forEach>
</c:forEach>
</c:forEach>
或将作业委托给会话范围的辅助bean,并提供一个getter来返回计数。
private int indx;
public void init() {
int indx = 0;
for (Grandparent grandparent : grandparents) {
for (Parent parent : grandparent.getParents()) {
for (Child child : parent.getChild()) { // getChildren()??
indx++;
}
}
}
this.indx = indx;
}
public int getIndx() {
return indx;
}
答案 1 :(得分:0)
Taglibs ui和c的生命周期不同。
你不能这样做。
你想做什么?