在jstl中循环二叉树

时间:2014-01-31 16:13:23

标签: java jsp jstl

我创建了一个二叉树,现在我想在条件中显示我的jsp中的结果。

每个节点有4个元素(id,question,answer和leftnode rightnode)

如果用户单击“是”,程序将转到树的左侧,如果他在树的右侧回答“否”。

例如,最初的问题是“你是男人吗?”如果他回答“是”,我们将向左侧和页面视图“你是一个歌手?”如果他回答“否”页面显示“你是法国人?”。

在java中,它会解决原始问题。

cursor [i]. GetQuestion ()

然后是的

cursor [i] getQuestion. GetLeftnode ()

并且没有

cursor [i]. GetRightnode (). GetQuestion

直到,一切正常,但是当我想循环直到

不再有任何问题
<c:when test="${not empty cursor[i].getQuestion() }">

程序在第一个循环停止并停止光标不为空

这是我的完整代码jstl

<c:choose>
   <c:when test="${not empty cursor[i].getQuestion() }">
      <c:if test="${param.btn eq 'Oui'}" var="oui">
         <c:set var="cursor" value="${cursor[i].getLeftnode() }" scope="session"></c:set>
         <c:set var="i" value="${i+1 }" scope="session"></c:set>
      </c:if>
      <c:if test="${param.btn eq 'Non'}" var="non">
         <c:set var="cursor" value="${cursor[i].getRightnode() }" scope="session"></c:set>
     <c:set var="i" value="${i+1 }" scope="session"></c:set>
      </c:if>
   </c:when>
</c:choose>

<c:out value="${cursor.getQuestion() }"></c:out>

谢谢

2 个答案:

答案 0 :(得分:0)

您必须使用如下所示的属性名称,而不是使用${cursor.getQuestion() }之类的方法:${cursor.question }

P.S。并确保你有一个正确的getter名称(get应该是小写)

答案 1 :(得分:0)

感谢您的帮助。 我找到了解决方案。对于那些感兴趣的人,这里有适用的代码

<c:set var="cursor" value="${nodes }" scope="application"></c:set>      <form method="get">
      <c:choose>
      <c:when test="${not empty cursor.getQuestion() }">
         <c:if test="${param.btn eq 'yes'}" var="yes">
        <c:set var="cursor" value="${cursor.getLeftnode() }" scope="session"></c:set>
         </c:if>
         <c:if test="${param.btn eq 'no'}" var="no">
        <c:set var="cursor" value="${cursor.getRightnode() }" scope="session"></c:set>
         </c:if>
      </c:when>
      </c:choose>
      <c:out value="${cursor.getQuestion() }"></c:out>

问题在于范围。在每个循环中,使用“session”作用域我的变量每次都被重置。通过范围内的“应用程序”,它只被初始化一次,我可以得到我想要的东西

感谢